我有以下数据:
data d;
input date1 $ date2 $;
cards;
5oct10 11nov11
6jul12 12oct13
1jan08 4may10
4may04 8jul06
1mar07 5aug07
18may04 1oug09
7aug05 8jul09
1feb03 5apr06
3feb01 15jul08
4apr07 16apr07
run;
*我需要在date7.informat中读取它,然后在date9.format上显示数据。
*我该如何以宽度格式读取数据,如何将日期宽度从7转换为9,而我的车辆不是完全数字?
尝试这样的事情时:
proc print data=d;
format date1 date2 date9.;;
run;
它失败,因为我在非完全数字var
上使用数字格式答案 0 :(得分:1)
data d;
input date1 date7. date2 date7.;
format date1 date9. date2 date9.;
cards;
5oct10 11nov11
6jul12 12oct13
1jan08 4may10
4may04 8jul06
1mar07 5aug07
18may04 1oug09
7aug05 8jul09
1feb03 5apr06
3feb01 15jul08
4apr07 16apr07
;
run;
答案 1 :(得分:0)
修改您的数据步骤:
input date1 date7. date2 date7.;
如果您使用date1 $
来阅读日期行,那么您的结果数据集将具有date1 = '5oct10','6jul12' and so on
的值。但是,在date9.
处应用格式proc print
时,您需要提供SAS时间值。请注意,SAS以自己的格式读取时间值,即从1960年1月1日开始计算。您可以通过运行语句`put"今天是今天()"来尝试它。在你的SAS。
修改后你的proc print语句应该可以正常工作。
并且,由于某些原因,您希望以自己的格式(即5oct10
)读取date1和date2的值,我担心您可能需要分别将值分别为日,月和年(例如,通过scan
函数)并使用函数MDY( month, day, year)
将其转换为SAS时间值。在date7.
语句中使用proc print
的格式语句也适用于此情况。
答案 2 :(得分:0)
如果使用INFORMAT语句告诉SAS如何读取变量,那么您不需要在INPUT语句中列出格式。 INFORMAT和变量的FORMAT不需要相同,但在这种情况下,它们可能是因为DATE9信息将识别只有两位数年份的值。
informat date1 date2 date9.;
format date1 date2 date9.;
input date1 date2 ;