Multithreading SAS proc 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的所有复杂之处,

在尝试启动并运行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”,它也不会运行。