在尝试启动并运行DS2线程时,我收到了一个奇怪的错误代码。
proc ds2;
thread work.th_ieb /overwrite=yes;
dcl DOUBLE Beg_Jahr;
METHOD RUN();
set {select id, date
from DATA
};
IF FIRST.id THEN DO;
Beg_Jahr = YEAR(DATE);
OUTPUT;
END;
END;
endthread;
run;
错误是:
ERROR: Compilation error.
ERROR: Illegal conversion for date or time type. Source line 34.
没有YEAR功能,它工作正常。有什么想法吗?
答案 0 :(得分:1)
以下是我用来重现您的问题的完整示例程序,此版本适用于我的网站。一个关键的变化是' dt'在sas源数据中使用11.0而不是date9。即使SAS文档说应该使用date9,我也无法使用date9。
data stuff;
format dt 11.0 id 11.0;
dt='01JAN2015'd;
id = 1;
run;
proc ds2;
thread work.th_ieb /overwrite=yes;
dcl double Beg_Jahr;
dcl date ds2_dt having format yymmdd10.;
METHOD RUN();
set {select id, dt
from stuff
order by id
};
by id;
ds2_dt = to_date(dt);
put ds2_dt=;
IF FIRST.id THEN DO;
Beg_Jahr = year(dt);
put beg_jahr=;
OUTPUT;
END;
END;
endthread;
data;
dcl thread th_ieb t_inst;
method run();
set from t_inst threads=2;
end;
enddata;
run;
答案 1 :(得分:0)
我承认我并不完全理解DS2的所有复杂功能,但这个解决方案对我有用。
将您称之为date
的变量的名称更改为其他名称,因为date
是DS2中的关键字。关于这些事情,DS2比基础SAS更挑剔。在这里,我只是为了举例而调用变量birthdt
。
确保输入数据集中的日期变量为数字。
proc ds2;
thread work.th_ieb / overwrite = yes;
dcl double beg_jahr;
method run();
set {
select id, birthdt
from data
};
if first.id then do;
beg_jahr = year(birthdt);
output;
end;
end;
endthread;
run;
quit;