在sas输出表中更改日期类型

时间:2016-11-14 10:16:49

标签: 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 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

为什么这个?为什么格式与原始数据不同?

1 个答案:

答案 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;