更改sas输出表中的日期类型
在以下sas代码中更改sas输出表中的日期类型,sas,Sas,在以下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 temp3
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;
当我执行以下操作时:
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
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;
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;
为什么会这样??为什么不使用与原始数据相同的格式?关于您的第一个问题-只需按如下方式修改格式:
two_days_before two_days_after
20764 20768
20758 20762
20763 20767
20730 20734
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;
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 print
中的格式,而不是数据集(我假定您正在谈论have01211
)。只需将格式附加到数据步骤中的这些变量,如下所示:
two_days_before two_days_after
20764 20768
20758 20762
20763 20767
20730 20734
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;
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 print
中都不需要format语句:
proc print data = have01211 noobs;
run;
我想我会在两天之前,两天之后作为数字离开。谢谢你澄清我的疑问并纠正我的错误。