SAS代码中的;日期“;
我在SAS中遇到过以不同方式处理的代码 “日期”。然而,我不明白上一个“格式”在这里做什么。 代码如下SAS代码中的;日期“;,sas,Sas,我在SAS中遇到过以不同方式处理的代码 “日期”。然而,我不明白上一个“格式”在这里做什么。 代码如下 DATA SASWEEK.Datestest; INPUT d1 MMDDYY8. +1 d2 DATE9.; * informat does; * Can be replaced by an informat statement; d1f = d1; d2f= d2; d3f = d2; FORMAT d1f DATE9. d2f WORDDATE. d3
DATA SASWEEK.Datestest;
INPUT d1 MMDDYY8. +1 d2 DATE9.;
* informat does;
* Can be replaced by an informat statement;
d1f = d1;
d2f= d2;
d3f = d2;
FORMAT d1f DATE9. d2f WORDDATE. d3f MMDDYY8.; *formats;
datalines;
01111960 12JAN1960
01011961 01MAR2013
;
PROC PRINt;
RUN;
PROC PRINT;
FORMAT d1f 9.0 d1 WEEKDATE.;
RUN;
任何建议和解释都将不胜感激 我不确定您是否将
proc print
中的格式称为格式d1f 9.0 d1工作日代码>,或数据步骤中的最后一种格式格式d1f DATE9。d2f字日期。d3f-MMDDYY8代码>
无论哪种方式,格式都只会影响数据的显示方式,而不会更改保存的值,在您的情况下,保存的值只是数字,因为日期存储为数字
SAS日期从1960年1月1日的0开始,然后从1960年1月2日的1开始,依此类推。这就是为什么在第一次观察的proc print
输出中可以看到10
和11
等值,第二次观察遵循相同的计数顺序
重申一下,格式只是影响显示,而不是值
编辑
针对评论中的问题:
根据你的解释,最后一个“D1F9.0”是从
01/11/60->“01111960”
你的问题的简短答案是“不”,解释如下
d1f
的第一次观察是基于1960年1月11日的输入数据01111960
,以及SAS计算天数时的天数10
(如我最初的回答中所述)
变量d1f
包含第一次观察的值10
。
d1f
的格式为DATE9。
在初始数据步骤中应用于它,因此第一个proc print
将11JAN1960
显示为d1f
的第一个值
第二个proc print
将格式9.0
应用于d1f
的值,这指示SAS在9列(小数点后0位)内显示d1f
(值为10
)的值,这就是为什么在第二个proc print
中,10
显示为d1f
的第一个值
以下数据步骤也可能有助于演示如果在代码之后运行它并检查日志中的结果会发生什么:
data _null_;
set SASWEEK.Datestest;
put d1f;
put d1f 9.0;
put d1f 8.0;
put d1f 7.0;
put d1f 6.0;
put d1f 5.0;
put d1f 4.0;
put d1f 3.0;
run;
你是说上一个与PROC PRINT一起使用的format语句吗?是的,最后一个format语句我指的是最后一个format语句,我不明白“d1f 9.0”在这里做什么。因此,根据您的解释,最后一个“d1f 9.0”是从60年11月1日开始制作d1f->“01111960”?请参阅相关的“编辑”以了解我的回答。