楼主: 邱邱大先生
764 0

[SAS EM] 求SAS大神帮忙 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

7%

还不是VIP/贵宾

-

威望
0
论坛币
20 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
60 点
帖子
1
精华
0
在线时间
7 小时
注册时间
2019-5-6
最后登录
2020-7-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
求SAS大神帮忙看看这个代码出现什么问题?一直跑不了
/***SAS 宏程序Time_Stratified,参数说明见表5***/
%MACRO Time_Stratified(IN_DSN = ,OUT_DSN = ,
DATE_VAR = ,
LAG_EFFECT = ,
LAG_VARS = ,
COUNTS_VAR = ) ;
/***按照日期排序,方便滞后效应设置,生成数据集TEMP_SORT***/
PROC SORT DATA =&IN_DSN OUT = TEMP_SORT;
BY &DATE_VAR;
RUN;
/***根据滞后效应( LAG_EFFECT = ) ,构造EXPAND过程CONVERT 语句部分CODE***/
DATA _NULL_;
IF FIND( "&LAG_EFFECT", '-') THEN DO;
LAG1 = INPUT( SCAN( " &LAG_EFFECT" ,1, '-') , 12. );
LAG2 = INPUT( SCAN( " &LAG_EFFECT" ,2, '-') , 12. );
END;
ELSE DO;
LAG1 = &LAG_EFFECT;
LAG2 = &LAG_EFFECT;
END;
LAG = LAG1;
/***滞后天数***/
MOVAVE = LAG2 - LAG1 + 1; /***移动平均天数***/
TRIMLEFT = LAG2; /***缺失天数***/
IF LAG^ = 0 THEN
CODE = CATX( " ","LAG" ,LAG) ;
IF MOVAVE^ = 0 THEN
CODE = CATX( " ",CODE,"MOVAVE",MOVAVE) ;
IF TRIMLEFT^ = 0 THEN
CODE = CATX( " " ,CODE,"TRIMLEFT" ,TRIMLEFT);
CALL SYMPUT( 'CODE',CODE) ;
RUN;
/***处理滞后效应,包括LAG?MOVAVE?TRIMLEFT等转换操作,生成数据集TEMP_LAG***/
PROC EXPAND DATA = TEMP_SORT METHOD = NONEout = TEMP_LAG(DROP = &LAG_VARS WHERE = (NOTMISSING(LAG_ %SYSFUNC(SCAN(&LAG_VARS,1)))));
%DO I = 1% TO %SYSFUNC( COUNTW( &LAG_VARS) );
%LET VAR_NAME = %SYSFUNC( SCAN( &LAG_VARS,&I) );
CONVERT &VAR_NAME = LAG_&VAR_NAME /TRANSFORMIN = ( &CODE);
%END;
ID &DATE_VAR;
RUN;
/***将资料整理成列联表形式,生成数据集TEMP_STRATUM***/
DATA TEMP_STRATUM;
/***CASE_POINT 为病例期指针位置***/
SET TEMP_LAG NOBS = N CUROBS = CASE_POINT;
/***CASE_YEAR 为病例期年份***/
CASE_YEAR = YEAR( &DATE_VAR) ;
/***CASE_MONTH 为病例期月份***/
CASE_MONTH = MONTH( &DATE_VAR) ;
/***CASE_WEEKDAY 为病例期星期几***/
CASE_WEEKDAY =WEEKDAY( &DATE_VAR) ;
/***STRATUM 为分层变量***/
STRATUM = CASE_POINT;
Y = 1; OUTPUT; /* Y = 1 表示病例* /
/***CTRL_POINT 为对照期指针位置,初步指定对照期位置为CASE_POINT 前后30 天***/
DO CTRL_POINT =CASE_POINT-30 TO CASE_POINT-1,
CASE_POINT + 1 TO CASE_POINT + 30;
SET TEMP_LAG POINT = CTRL_POINT;
/***精确指定对照期位置***/
IF 1 < = CTRL_POINT < = N AND
YEAR( &DATE_VAR) = CASE_YEAR AND
MONTH( &DATE_VAR) = CASE_MONTH AND
WEEKDAY( &DATE_VAR) = CASE_WEEKDAY
THEN DO; Y = 0; OUTPUT; END;
/***Y = 0 表示对照***/
/***避免日志出现无意义提示信息***/
_ERROR_ = 0;
END;
DROP CASE_YEAR CASE_MONTH CASE_WEEKDAY;
RUN;
/***根据频数变量COUNTS _VAR 将列联表展开,生成数据集&OUT_DSN***/
DATA &OUT_DSN;
SET TEMP_STRATUM;
BY STRATUM;
RETAIN N;
IF FIRST.STRATUM THEN N = &COUNTS_VAR;
DO I = 1 TO N;
OUTPUT;
END;
DROP N;
RUN;
%MEND Time_Stratified;
/***调用宏程序Time_Stratified***/
%Time_Stratified(IN_DSN = TEST,OUT_DSN = TIME_STRATIFIED,DATE_VAR = DATE,LAG_EFFECT = 0,LAG_VARS = TEMP PM10 SO2,COUNTS_VAR = COUNT)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:stratified transform stratum weekday sysfunc

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 18:55