如何将 Sas 中特定列的字符串格式更改为日期格式

问题描述 投票:0回答:1

我有一个包含 100 列的数据集。更简单和更小的版本如下:

账户 预计结束日期 需要_日期 金额 接受日期 确认_日期 评论
约翰 2024 年 1 月 15 日 2024 年 1 月 15 日 1000 等待接受
约翰 2024 年 1 月 23 日 2024 年 1 月 28 日 20000 2024 年 1 月 20 日 2024 年 1 月 22 日 已关闭
山姆 2023年12月25日
彼得 2024 年 4 月 5 日 2024 年 4 月 12 日 350 2024 年 3 月 27 日 需要确认

该数据集大约有 30-35 列,其中包含各种日期,全部采用字符格式。我需要将它们全部转换为日期格式。 此外,带有日期信息的列数可以改变,即可以有新的添加或删除。

我知道:

data want;
set database;
format temp mmddyy10.;
temp = input(Anticipated_Close_Date, mmddyy10.);
drop Anticipated_Close_Date;
rename temp = Anticipated_Close_Date;

将为我提供所需的格式。我还确定了所有包含“日期”的列:

proc contents data = database out= contents noprint; run;

proc sql;
select name into :varlist seperated by ' '
from contents
where name like '%Date%';
quit;

我不知道如何将它们结合起来并在整个数据集上运行它。我的猜测是我们需要迭代每一列并检查该列是否是“varlist”的一部分,如果为真,则使用输入函数。 请帮忙。

date sas dataset
1个回答
0
投票

您可以使用

:varlist
指定 DATA Step 数组的元素并循环遍历该数组。您将需要更多的 SQL :into 来创建转换和重命名所需的其他代码片段。

示例:

名为*Date*的变量是字符串,将字符串转换为SAS日期值后应使用相同的名称。

proc contents data = database out= contents noprint; run;

proc sql;
select 
  cats(name,'=_',varnum)
, cats('_',varnum)
, cats(name)
into
  :rename_in separated by ' '
  :temp_date_vars separated by ' '
  :date_vars separated by ' '
from contents
where name like '%Date%';
quit;

data want ;
  set database (rename=&rename_in) ;
  array tempdates &temp_date_vars ;
  array dates &date_vars ;
  do over dates ;
    dates = input(tempdates,mmddyy10.) ;
  end ;
  format &date_vars mmddyy10. ;
run;
© www.soinside.com 2019 - 2024. All rights reserved.