将文本数据转换为日期
Convert text data to Date
我正在从 xlsx 文件中读取数据,其中有一列包含文本值 ('Cancelled'、'Postponed'、'1-01-2018')。我想将此列转换为日期类型。
我宁愿避免使用 SAS,如果可能的话,我会使用 PROC SQL 来完成这件事
我尝试使用 PROC SQL,但我在 SQL 中找不到任何描述 SAS
中可用的有效日期函数的地方
CREATE TABLE fixed_date AS
SELECT
start_date,datepart(end_date) as formatted_date
FROM
input_file
WHERE end_date_validity = 1;
QUIT;
我期待一个包含我可以对其进行日期算术的列的数据集。我目前收到错误:
ERROR: Wrong number of arguments for function datepart
具有 'mixed' 类型数据的 Excel 列在导入 SAS 时将变为字符类型。您将需要创建一个新列,其中带有 'date' 字符串的行将包含 SAS 日期值,不包含日期字符串的行将是缺失值——INPUT
函数可以用于将日期字符串转换为日期值。
例如
proc sql;
create table have (delivery_date char(20));
insert into have
values ('Cancelled')
values ('Postponed')
values ('1-01-2018')
;
create table want as
select
delivery_date as delivery_date_string, /* keep column of original data */
input (delivery_date, ? mmddyy10.) as delivery_date format=yymmdd10. /* create new column as date value */
from
have
;
因为你知道INPUT
会遇到一些非日期字符串,所以我在信息格式(mmddyy10.
)之前添加了问号(?
)修饰符。修饰符将阻止日志注释,例如
NOTE: Invalid date value
NOTE: Invalid argument to function INPUT. Missing values may be generated.
来自 INPUT
的文档
? or ??
specifies the optional question mark (?) and double question mark (??)
modifiers that suppress the printing of error messages and input lines
when invalid data values are read. The ? modifier suppresses the
invalid data message. The ?? modifier suppresses the invalid data
message and prevents the automatic variable _ ERROR _ from being set to
1 when invalid data is read.
另外,??只能在数据步中使用。
我正在从 xlsx 文件中读取数据,其中有一列包含文本值 ('Cancelled'、'Postponed'、'1-01-2018')。我想将此列转换为日期类型。
我宁愿避免使用 SAS,如果可能的话,我会使用 PROC SQL 来完成这件事
我尝试使用 PROC SQL,但我在 SQL 中找不到任何描述 SAS
中可用的有效日期函数的地方 CREATE TABLE fixed_date AS
SELECT
start_date,datepart(end_date) as formatted_date
FROM
input_file
WHERE end_date_validity = 1;
QUIT;
我期待一个包含我可以对其进行日期算术的列的数据集。我目前收到错误:
ERROR: Wrong number of arguments for function datepart
具有 'mixed' 类型数据的 Excel 列在导入 SAS 时将变为字符类型。您将需要创建一个新列,其中带有 'date' 字符串的行将包含 SAS 日期值,不包含日期字符串的行将是缺失值——INPUT
函数可以用于将日期字符串转换为日期值。
例如
proc sql;
create table have (delivery_date char(20));
insert into have
values ('Cancelled')
values ('Postponed')
values ('1-01-2018')
;
create table want as
select
delivery_date as delivery_date_string, /* keep column of original data */
input (delivery_date, ? mmddyy10.) as delivery_date format=yymmdd10. /* create new column as date value */
from
have
;
因为你知道INPUT
会遇到一些非日期字符串,所以我在信息格式(mmddyy10.
)之前添加了问号(?
)修饰符。修饰符将阻止日志注释,例如
NOTE: Invalid date value
NOTE: Invalid argument to function INPUT. Missing values may be generated.
来自 INPUT
? or ??
specifies the optional question mark (?) and double question mark (??) modifiers that suppress the printing of error messages and input lines when invalid data values are read. The ? modifier suppresses the invalid data message. The ?? modifier suppresses the invalid data message and prevents the automatic variable _ ERROR _ from being set to 1 when invalid data is read.
另外,??只能在数据步中使用。