COMPRESS以不同的方式运行(proc sql和step数据)

时间:2018-07-18 19:59:51

标签: sas

我正在使用SAS指南7.1,我需要使用proc sql运行一个进程,但是它不能很好地工作,尽管它可以很好地处理步骤数据。 愚蠢的代码复制了问题

data test;
input date;
datalines;
20140101
;
run;

data test2;
set test;
date1 = input(compress(date),yymmdd10.);
format date1 date9.;
run;

输出 enter image description here

带有proc sql的代码:

proc sql;
    create table test3 as select
         *,
    input(compress(date),yymmdd10.) format date9. as date1
from test;
quit;

错误消息:

函数COMPRESS需要一个字符表达式作为参数1。 为什么COMPRESS可以同时处理步骤数据和proc sql?

1 个答案:

答案 0 :(得分:2)

compress()函数以相同的方式运行。

但是PROC SQL不会像数据步骤那样进行自动类型转换。查看数据步骤中的注释。

207  data test2;
208  set test;
209  date1 = input(compress(date),yymmdd10.);
210  format date1 date9.;
211  run;

NOTE: Numeric values have been converted to character values at the places given by:
      (Line):(Column).
      209:24

只需明确告诉SAS您要将数字20,140,​​101转换为字符串'20140101',然后将该字符串转换为日期值即可。

input(put(date,z8.),yymmdd8.)