2

I have an input file, where my dates don't have leading zeros (like 25.3.2016) but I would like to transform them into format DDMMYYYYP10.

Is there any format, informat, function etc. that could do that for me?

I'm using SAS Enterprise Guide 4.3.

4

3 回答 3

3

真的不需要任何“转换”。您只需要两件事:

  1. ANYDTDTE10.SAS 在读取数据时充分识别日期的正确信息(在您的情况下,应该这样做)
  2. 显示日期的输出格式(您要求DDMMYYP10.),前提是它们已使用上述信息正确导入。

插图:

data dates;
  format mydate DDMMYYP10.;
  input mydate ANYDTDTE10.;
  datalines;
25.3.2016
run;

proc print;run;

结果:

Obs mydate 
1   25.03.2016 

当然,如果您正在读取外部数据(我假设是您的情况),您将需要一个INFILE声明而不是 a DATALINES,但结果将是相同的。

请记住,输出格式只是格式。您可以随意更改它们而不影响基础数据。所以这里的关键是信息

于 2016-03-26T20:26:40.433 回答
1

我的输入是数据集,所以这对我有用:

data dates; 
    set My_data;
        format date1 DDMMYYP10.;
        date1 = input (date, anydtdte10.);

run;
于 2016-04-01T08:23:21.040 回答
0

SAS 旨在将日期存储为“SAS 日期”,这是一个数字变量,表示自 1960 年 1 月 1 日以来的天数。假设您有一个 SAS 日期(而不是看起来像日期的字符变量),更改用于此变量的格式应该是直截了当的。请注意,这实际上并没有转换值,它只是更改了用于在打印时显示值的格式等。

36   data want;
37     mydate="1Mar2016"d;
38     put mydate=;
39     format mydate ddmmyyp10.;
40   run;

mydate=01.03.2016

编辑:我重读了您的问题并意识到您可能没有 SAS 数据集作为输入,而是有一个文本文件?如果是这样,您可以使用 ddmmyy10 信息读取日期,例如 25.3.2016。下面使用 ddmmyy10 informat 从文本文件中读取值,然后使用 ddmmyyp10 格式使用句点分隔符对其进行格式化:

115  data want;
116    input mydate ddmmyy10.;
117    put mydate=;
118    format mydate ddmmyyp10.;
119    cards;

mydate=01.03.1960
NOTE: The data set WORK.WANT has 1 observations and 1 variables.

121  ;
122  run;
于 2016-03-25T11:31:29.980 回答