谢谢!
目的:要进行多次chi-square test,
如何只改变数据集变量的取值及数据集名?
log中错误提示如下:
- 116 %macro mfreq(n11=,n12=,n21=,n22=,name=);
- 117 data &name.;
- 118 do group = 1 to 2;
- 119 do r = 1 to 2;
- 120 input f @@;
- 121 output;
- 122 end;
- 123 end;
- 124 cards;
- 125 %eval(&n11.+0)
- 126 %eval(&n12.+0)
- 127 %eval(&n21.+0)
- 128 %eval(&n22.+0)
- 129 ;
- 130 run;
- 131 proc print data=&name.;
- 132 run;
- 133 proc freq data=&name.;
- 134 weight f;
- 135 tables group*r/expected chisq exact;
- 136 run;
- 137 %mend mfreq;
- 138
- 139 %mfreq(n11=15,n12=35,n21=33,n22=27,name=fail)
- NOTE: 由于出错,SAS 系统停止处理该步。
- NOTE: “PROCEDURE FREQ”所用时间(总处理时间):
- 实际时间 37.80 秒
- CPU 时间 1.91 秒
- ERROR: 宏 MFREQ 生成了 DATA 步的 CARDS(数据行),可能导致不正确的结果。DATA 步和宏将停止执行。
- NOTE: 数据集 WORK.FAIL 有 0 个观测和 3 个变量。
- NOTE: “DATA 语句”所用时间(总处理时间):
- 实际时间 0.01 秒
- CPU 时间 0.01 秒
- NOTE: 由宏函数 N11 生成行。
- 1 15
- --
- 180
- ERROR 180-322: 语句无效或未按正确顺序使用。
- NOTE: 数据集 WORK.FAIL 中没有观测。
code1:
- %macro mfreq(n11=,n12=,n21=,n22=,name=);
- data &name.;
- do group = 1 to 2;
- do r = 1 to 2;
- input f @@;
- output;
- end;
- end;
- cards;
- %eval(&n11.+0)
- %eval(&n12.+0)
- %eval(&n21.+0)
- %eval(&n22.+0)
- ;
- run;
- proc print data=&name.;
- run;
- proc freq data=&name.;
- weight f;
- tables group*r/expected chisq exact;
- run;
- %mend mfreq;
- %mfreq(n11=15,n12=35,n21=33,n22=27,name=fail)
可能cards识别不了,
用%eval()转换也不行.
code2:
%macro mfreq(n11=,n12=,n21=,n22=,name=);
data &name.;
do group = 1 to 2;
do r = 1 to 2;
input f @@;
output;
end;
end;
cards;
&n11.
&n12.
&n21.
&n22.
;
run;
proc print data=&name.;
run;
proc freq data=&name.;
weight f;
tables group*r/expected chisq exact;
run;
%mend mfreq;
%mfreq(n11=15,n12=35,n21=33,n22=27,name=fail)