sas中的格式和信息

时间:2015-06-13 13:50:07

标签: format sas informat

我有以下数据:

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

上使用数字格式

3 个答案:

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