SAS: преобразование текстового формата в формат даты и поиск разницы между датами

Я новичок в SAS, и у меня есть набор данных что-то вроде ниже:

Payment 335861  36416   5   41641   41648
Payment 335861  85610   8   41641   41648
Payment 335861  99214   156 41641   41648

В последних двух столбцах указаны даты в текстовом формате, которые вы получаете при создании файла с разделителями табуляции в Excel.

Теперь я хочу преобразовать эти числа в формат даты. а затем найдите разницу (в днях) для полученных таким образом дат. Я пытался "Inmatmat" способ, но не получаю с ним. Пожалуйста, помогите....

1 ответ

Решение
data sample_data;
infile cards;
input type $ id amount count tdate1 $ tdate2 $;
cards   ;
Payment 335861  36416   5   41641   41648
Payment 335861  85610   8   41641   41648
Payment 335861  99214   156 41641   41648
;
run;

data out_data;
set sample_data;
format date1 date2 yymmdds10.; /* format=display number (of days) as DATE */
date1 = input(tdate1, 5.);/* conversion from text to number 
                (assuming it's a SAS date value=number of days from 1jan1960 */
date2 = input(tdate2, 5.);
datediff = date1 - date2; /* calculate date difference */
run;

В примере предполагается, что ваши "даты" взяты из SAS, то есть с 1jan1960 прошло несколько дней. Это будет означать, что значение '41641' равно 3jan2074.

В случае, если числа взяты из другого источника данных, а их значение отличается, вам придется внести некоторые поправки в числа / даты.

Например, в Excel '41641' - 2.1.2014 (это число дней с 1jan1900 + 1). Преобразование + настройка, необходимая в этом случае, будет:

date1 = input(tdate1, 5.) - ('1jan1960'd - '1jan1900'd) - 2;
date2 = input(tdate2, 5.) - ('1jan1960'd - '1jan1900'd) - 2;
Другие вопросы по тегам