0

我有以下数据:

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 上使用了数字格式

4

3 回答 3

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;
于 2015-06-13T17:02:56.200 回答
0

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

input date1 date7. date2 date7.;

如果您使用date1 $读取日期线,则生成的数据集将具有 date1 = 的值 '5oct10','6jul12' and so on。但是,当您应用格式date9.at 时proc print,您需要提供 SAS 时间值。请注意,SAS 以自己的格式读取时间值,即从 1960 年 1 月 1 日开始计算。您可以通过在您的 SAS 上运行语句“put "today is today()" 来尝试它。

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

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

于 2015-06-13T15:04:32.067 回答
0

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

informat date1 date2 date9.;
format date1 date2 date9.;
input date1 date2 ;
于 2015-06-14T14:58:00.333 回答