如何使用 PROC SQL 将数字列(如 200012)转换为 SAS 日期变量?

How do I convert a number column like 200012 to a SAS date variable using PROC SQL?

我有一个 SAS 数据集,其中包含一个文本字段 customer_id 和一个数字字段 month,格式为 YYYYMM。我正在创建这些数据的视图,我想将数据转换为标准的 SAS 日期(希望)在导出时保留。例如:

proc sql;
    create view my_view as
        select customer_id, month from raw_dataset;
    quit;

proc export data = my_view
    file = "out.dta"
    dbms = stata replace;
quit;

查看 date documentation,看起来数字的形式(虽然不是数据类型)YYMMN.,但我希望它采用 SAS 可以使用的格式日期,不仅仅是一个数字,例如proc expand.

我已经看到很多使用 putdatepart 组合的问题,但由于我不希望变量作为字符串并且还没有日期时间变量,我不确定如何应用这些。

当我 运行 此 SQL 查询时,如何将此列转换为 SAS 日期数据类型?

YYMMN. 是正确的信息格式,而 input 正是您获取信息的方式,所以这是一个日期。试试吧!

data want;
  x='201403';
  y=input(x,YYMMN6.);
  put _all_;
run;

当然,y 如果您想查看它,现在可能应该格式化得很好,但它不需要。

PROC SQL 中,其工作方式相同。

proc sql;
  create view want_v as
    select x, y, input(x,yymmn6.) as z format=date9.
        from want;
quit;

这也添加了一种格式,因此它看起来可读,但它仍然是一个日期变量,下面与 y 相同。