sas中的格式和信息

format and informat in sas

我有以下数据:

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;

它失败了,因为我在 none-完全数字变量

上使用了数字格式

修改您的数据步骤,以便:

input date1 date7. date2 date7.;

如果您使用 date1 $ 来读取日期线,您得到的数据集将具有 date1 = '5oct10','6jul12' and so on 的值。但是,当您在 proc print 应用格式 date9. 时,您需要提供一个 SAS 时间值。请注意,SAS 以其自己的格式读取时间值,即从 01/Jan/1960 开始计数。您可以通过 运行 语句 `put "today is today()" 在您的 SAS 中尝试。

并且您的 proc print 语句在修改后应该可以正常工作。

而且,出于某些原因,您想以自己的格式读取 date1 和 date2 的值,即 5oct10,恐怕您可能需要将值日、月和年分开分别(例如通过 scan 函数)并使用函数 MDY( month, day, year) 将其转换为 SAS 时间值。 date7. at proc print 语句的格式语句在这种情况下也适用。

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;

如果您使用 INFORMAT 语句告诉 SAS 如何读取变量,那么您不需要在 INPUT 语句中列出格式。变量的 INFORMAT 和 FORMAT 不需要相同,但在这种情况下它们可以相同,因为 DATE9 信息格式将识别只有两位数年份的值。

informat date1 date2 date9.;
format date1 date2 date9.;
input date1 date2 ;