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

Date 如何使用PROC SQL将数字列(如200012)转换为SAS日期变量?,date,sas,proc-sql,Date,Sas,Proc Sql,我有一个SAS数据集,其中有一个文本字段customer\u id和一个格式为YYYYMM的数字字段month。我正在创建这些数据的视图,我想将数据转换为标准的SAS日期,希望在导出时保留该日期。例如: proc sql; create view my_view as select customer_id, month from raw_dataset; quit; proc export data = my_view file = "out.dta"

我有一个SAS数据集,其中有一个文本字段
customer\u id
和一个格式为
YYYYMM
的数字字段
month
。我正在创建这些数据的视图,我想将数据转换为标准的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;
查看,看起来数字的格式是(虽然不是数据类型)
YYMMN.
,但我希望它的格式是SAS可以作为日期使用的格式,而不仅仅是数字,例如使用
proc expand

我已经看到了很多使用
put
datepart
组合的问题,但是由于我不希望变量作为字符串,并且还没有datetime变量,我不确定如何应用它们


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

YYMMN.
是正确使用的信息,而
input
正是您获取它的方式,因此它是一个日期。试试看

data want;
  x='201403';
  y=input(x,YYMMN6.);
  put _all_;
run;
当然,如果您想查看它,
y
现在可能应该很好地格式化,但不需要这样

procsql
中,其工作方式相同

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

这还添加了一种格式,使其看起来可读,但它仍然是一个日期变量,下面与
y

相同。这给了我一个错误,说“输入函数需要一个字符参数”。我假设我得到这个值是因为我的
month
变量实际上是一个六位数,而不是字符串?我也尝试了
输入(put(month),yymmn6.)
,但我得到了相同的错误。我现在使用
输入(put(month,yymmn6.),yymmn6.)运行它
来查看它是否有效,但是由于数据集非常大,该作业需要一段时间。如果您的字段是数字字段,那么您必须先
将它放入字符<代码>输入(put(datefield,6.),yymmn6.)
您需要在
put
函数中使用
put
的格式。你的第二个不起作用,因为这就好像你的数据已经是一个基本的日期字段-所以
201403
将是400年后的未来!啊,好的。这很有效。如果我将输入格式指定为
MMDDYY10.
,这会自动将日期设置为每月的第一天(我想要),还是需要做更多的工作以将其扩展到更高的频率?(我意识到这是一个有点独立的问题,但我意识到我需要这样做,所以我想结束这一个细节)。使用
YYMMNw时,这一天始终是一个月的第一天。
informat。您可以为结果字段指定任何格式。这种方法有什么好处:
MDY(MOD(x,100),1,INT(x/100))