SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1638|回复: 2
打印 上一主题 下一主题

请问高手如何将下面的程序变成宏

[复制链接]

1

主题

13

帖子

54

积分

注册会员

Rank: 2

积分
54
跳转到指定楼层
楼主
发表于 2014-11-27 21:57:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;

分享到:  微信微信
收藏收藏
回复

使用道具 举报

1

主题

13

帖子

54

积分

注册会员

Rank: 2

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

使用道具 举报

1

主题

13

帖子

54

积分

注册会员

Rank: 2

积分
54
板凳
 楼主| 发表于 2014-11-27 21:57:54 | 只看该作者
这里我要用的是变量的值参与计算,而且这个变量名是可变的,如果把这个变量名做为一个宏变量,如何用它的值用于数字运算呢?
老夫观夜象,希望有大神出现。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2024-4-19 20:17 , Processed in 0.672381 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表