Multithreading SAS proc ds2年功能
在尝试启动并运行DS2线程时,我收到一个奇怪的错误代码Multithreading SAS proc ds2年功能,multithreading,sas,sas-ds2,Multithreading,Sas,Sas Ds2,在尝试启动并运行DS2线程时,我收到一个奇怪的错误代码 procds2; thread work.th_ieb/overwrite=是; dcl双Beg_Jahr; 方法RUN(); 设置{选择id,日期 从数据 }; 如果是第一个,那么就做; Beg_Jahr=年份(日期); 产出; 结束; 结束; 端螺纹; 跑 错误是: 错误:编译错误。 错误:日期或时间类型的转换非法。资料来源第34行。 它在没有年份功能的情况下运行良好。有什么想法吗?我坦率地承认,我并不完全理解DS2的所有复杂之处,
procds2;
thread work.th_ieb/overwrite=是;
dcl双Beg_Jahr;
方法RUN();
设置{选择id,日期
从数据
};
如果是第一个,那么就做;
Beg_Jahr=年份(日期);
产出;
结束;
结束;
端螺纹;
跑
错误是:
错误:编译错误。
错误:日期或时间类型的转换非法。资料来源第34行。
它在没有年份功能的情况下运行良好。有什么想法吗?我坦率地承认,我并不完全理解DS2的所有复杂之处,但这个解决方案对我来说是可行的 将调用的变量名
date
更改为其他名称,因为date
是DS2中的关键字。DS2在这些方面比base SA挑剔得多。这里我将调用变量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;
这是一个完整的样本程序,我用来复制你的问题,这个版本在我的网站上工作。一个关键变化是在sas源数据中使用11.0而不是date9的“dt”格式。我不能让date9工作,即使SAS医生说应该
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;
确保与您调用的
date
变量关联的类型实际上具有日期类型。在PROC DS2
中,实际上有一种日期数据类型,与“传统”SAS不同,后者将日期存储为自1960年1月1日以来的天数。即使我添加了“dcl date date”,它也不会运行。