如何在 SAS 中将日期格式 d.m.yyyy 转换为 dd.mm.yyyy?
How to transform Date format d.m.yyyy to dd.mm.yyyy in SAS?
我有一个输入文件,其中我的日期没有前导零(例如 25.3.2016),但我想将它们转换为格式 DDMMYYYYP10。
是否有任何格式、信息格式、功能等可以为我做到这一点?
我正在使用 SAS Enterprise Guide 4.3。
SAS 旨在将日期存储为 "SAS Date",这是一个数字变量,表示自 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;
真的不需要 "transformation"。您只需要两件事:
- 正确的信息格式(在您的情况下,
ANYDTDTE10.
应该)让 SAS 在读取数据时充分识别日期
- 一种显示日期的输出格式(您要求
DDMMYYP10.
),前提是它们已使用上述信息正确导入。
插图:
data dates;
format mydate DDMMYYP10.;
input mydate ANYDTDTE10.;
datalines;
25.3.2016
run;
proc print;run;
结果:
Obs mydate
1 25.03.2016
当然,如果您正在读取外部数据(我假设是您的情况),您将需要 INFILE
语句而不是 DATALINES
,但结果是相同的。
请记住,输出格式是唯一的格式。您可以随意更改它们而不会影响基础数据。所以这里的关键实际上是 informat.
我的输入是数据集,所以这对我有用:
data dates;
set My_data;
format date1 DDMMYYP10.;
date1 = input (date, anydtdte10.);
run;
我有一个输入文件,其中我的日期没有前导零(例如 25.3.2016),但我想将它们转换为格式 DDMMYYYYP10。
是否有任何格式、信息格式、功能等可以为我做到这一点?
我正在使用 SAS Enterprise Guide 4.3。
SAS 旨在将日期存储为 "SAS Date",这是一个数字变量,表示自 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;
真的不需要 "transformation"。您只需要两件事:
- 正确的信息格式(在您的情况下,
ANYDTDTE10.
应该)让 SAS 在读取数据时充分识别日期 - 一种显示日期的输出格式(您要求
DDMMYYP10.
),前提是它们已使用上述信息正确导入。
插图:
data dates;
format mydate DDMMYYP10.;
input mydate ANYDTDTE10.;
datalines;
25.3.2016
run;
proc print;run;
结果:
Obs mydate
1 25.03.2016
当然,如果您正在读取外部数据(我假设是您的情况),您将需要 INFILE
语句而不是 DATALINES
,但结果是相同的。
请记住,输出格式是唯一的格式。您可以随意更改它们而不会影响基础数据。所以这里的关键实际上是 informat.
我的输入是数据集,所以这对我有用:
data dates;
set My_data;
format date1 DDMMYYP10.;
date1 = input (date, anydtdte10.);
run;