我正在从xlsx文件中读取数据,并且有一列包含文本值(“已取消”,“已推迟”,“ 2018年1月1日”)。我想将此列转换为日期类型。
我宁愿避免使用SAS,并尽可能使用PROC SQL完成此操作
我尝试使用PROC SQL,但是找不到在SAS中可用的描述SQL中有效日期函数的地方
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
答案 0 :(得分:3)
具有“混合”类型数据的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
的文档
?或??
指定可选问号(?)和双问号(??) 抑制打印错误消息和输入行的修饰符 当读取无效的数据值时。 ?修饰符抑制 无效的数据消息。 ??修饰符抑制无效数据 消息并阻止将自动变量_ ERROR _设置为 读取无效数据时为1。
还,??只能在DATA步骤中使用。