更改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

在以下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;
当我执行以下操作时:

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;

我想我会在两天之前,两天之后作为数字离开。谢谢你澄清我的疑问并纠正我的错误。