在以下sas代码中..
data temp2;
input id 1 @3 date mmddyy11.;
cards;
1 11/12/1980
2 10/20/1996
3 12/21/1999
;
run;
proc print data = temp2;
format date date9.;
run;
结果:
id date
1 12NOV1980
2 20OCT1996
3 21DEC1999
考虑以下输出和日期类型:
data temp3a;
set temp2;
two_days = intnx('day',date,2);
run;
proc print data = temp3a noobs;
format date two_days date9.;
run;
结果
id date two_days
1 12NOV1980 14NOV1980
2 20OCT1996 22OCT1996
3 21DEC1999 23DEC1999
我想要的是输出日期应采用以下格式:
id date two_days
1 12NOV80 14NOV80
2 20OCT96 22OCT96
3 21DEC99 23DEC99
当我执行以下操作时:
data have01211;
set WORK.XX;
two_days_before = intnx('day', Date, -2);
two_days_after = intnx('day', Date, 2);
run;
proc print data = have01211 noobs;
format two_days_before two_days_after date8.;
run;
我得到的结果如下:
two_days_before two_days_after
20764 20768
20758 20762
20763 20767
20730 20734
为什么这个?为什么格式与原始数据不同?
答案 0 :(得分:1)
关于你的第一个问题 - 只需修改格式如下:
data temp3a;
set temp2;
two_days = intnx('day',date,2);
run;
proc print data = temp3a noobs;
format date two_days date8.; /* shorter date format length */
run;
关于第二个问题 - 您正在应用proc print
但不是数据集中的格式(我假设您正在谈论have01211
)。只需在数据步骤中将格式附加到这些变量,如下所示:
data have01211;
set WORK.temp2;
two_days_before = intnx('day', Date, -2);
two_days_after = intnx('day', Date, 2);
format two_days_before two_days_after date8.;
run;
解释 - 在proc打印中应用格式时,它仅适用于该打印步骤。如果在创建数据集时添加格式,它将与该数据集一起永久存储 - 因此实际上您不需要在任何后续proc print
中使用格式语句:
proc print data = have01211 noobs;
run;