SAS中文论坛

标题: 请问高手如何将下面的程序变成宏 [打印本页]

作者: berry_li    时间: 2014-11-27 21:57
标题: 请问高手如何将下面的程序变成宏
proc sort data = sdtm.dm(keep = USUBJID RFSTDTC) out = dm;
   by USUBJID RFSTDTC;
run;
proc sort data = cm;
      by USUBJID;
run;
data cm;
   merge dm(in=a) cm(in=b);
      by USUBJID;
   if b;
   if length(RFSTDTC) >= 10 then _RFSTDTC = input(substr(RFSTDTC,1,10),yymmdd10.);
   if length(CMSTDTC) >= 10 then _CMSTDTC = input(substr(CMSTDTC,1,10),yymmdd10.);
   if length(CMENDTC) >= 10 then _CMENDTC = input(substr(CMENDTC,1,10),yymmdd10.));
   if nmiss(_RFSTDTC,_CMSTDTC) = 0 then CMSTDY = _CMSTDTC - _RFSTDTC + (_RFSTDTC <= _CMSTDTC); *** BR 05;
   if nmiss(_RFSTDTC,_CMENDTC) = 0 then CMENDY = _CMENDTC - _RFSTDTC + (_RFSTDTC <= _CMENDTC); *** BR 06;
run;


作者: berry_li    时间: 2014-11-27 21:57
现在详细描述一下问题:
dm部分不用管。
其中cm是可变的,比如ae。其中的变量CMSTDTC,CMENDTC也是可变的,比如AESTDTC,AEENDTC,而且变量名有这样的规律:前两个字母不一样,后面的字符一样。
其中XXSTDTC的值如同2012-12、2012-12-23、2012-12-12T12-等,为了计算,只能选择yymmdd10.的格式值。sq1有like "____-__-__%"这样的语法可以选择,但在data步中用不了。
如何写一个宏,使得只要需要选择数据集和变量,就可以完成计算,而且使得程序易读,运行效率快。我试了很多天,总是无法达成目标,希望我的问题说明白了。请大侠指点。

作者: berry_li    时间: 2014-11-27 21:57
这里我要用的是变量的值参与计算,而且这个变量名是可变的,如果把这个变量名做为一个宏变量,如何用它的值用于数字运算呢?
老夫观夜象,希望有大神出现。





欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2