Sas изменение формата даты - PullRequest
0 голосов
/ 11 июня 2018

У меня есть три столбца с разными форматами даты в SAS:

  1. 12 june 2017 00:15 - полная дата
  2. 2016 - только год
  3. 12- только месяц

Мне нужно изменить формат даты и вычесть после даты, чтобы получить результаты в количестве месяцев.

например, "12 June 2017 00:15" - December 2016 = 7

как это сделать?

Ответы [ 3 ]

0 голосов
/ 11 июня 2018
  1. Преобразование поля «полная дата» в значение даты SAS.
  2. Преобразование комбинации года и месяца в значение даты SAS.
  3. Использование функции INTCKчтобы найти разницу в месяцах.

Например:

даты данных;
ввод dt $ 18.ггг мм;
мм_дифф = intck («пн», ввод (кошки (гг, мм), ггм6.), ввод (dt, anydtdte12.));положить mm_diff =;
карты;
12 июня 2017 00:15 2016 12
11 июня 2018 00:15 2017 3
;
запустить;

В журнале будет напечатано:

mm_diff = 6 mm_diff = 15

В качестве дополнительного примечания, утверждение "нет готовой информации о дате SAS, которая будетправильно обрабатывать ваше поле полной даты "сделано в другом месте в этой теме неверно.Как показывает фрагмент программы выше, ANYDTDTEw.Informat обрабатывает это с апломбом.Программист просто обязан предоставить достаточную ширину информации W. Выше он выбран как W = 12.Если вы не хотите угадывать и / или считать, просто используйте ANYDTDTE32.

С уважением, Пол Дорфман

0 голосов
/ 11 июня 2018

Предполагая, что у вас есть три числовые переменные, а первая содержит действительные значения SAS datetime , вы должны сначала преобразовать оба значения в действительные значения SAS date .Затем вы можете использовать функцию INTCK () для подсчета месяцев.

 nmonths = intck('month',datepart(VAR1),mdy(VAR3,1,VAR2));
0 голосов
/ 11 июня 2018

Как вы, вероятно, уже нашли, нет готового SAS-информатора даты , который бы правильно обрабатывал ваше поле полной даты, поэтому вам нужно будет написать немного пользовательской логики для преобразованияэто, прежде чем делать ваши расчеты.date9. - самый близкий подходящий формат для поиска:

data example;
fulldate = '12 june 2017 00:15';
year = 2016;
month = 12;
/* Convert string to date9 format and input */
fulldate_num = input(
  cats(
    scan(fulldate,1),
    substr(scan(fulldate,2,' '),1,3),
    scan(fulldate,3)
  ), date9.
);
/* Calculate difference in months */
monthdiff = intck('month', mdy(month,1,year), fulldate_num);
run;
...