以下是我用sas做的程序
data sasuser.magzine;
input name gender;
label name="名称" gender="性别" ;
cards;
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 2
1 1
1 1
1 1
1 1
1 1
1 2
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 2
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 2
1 1
1 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 2
2 1
2 1
2 2
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 2
2 1
2 1
2 1
2 1
2 1
2 2
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
;
run;
proc format;
value name_fmt 1='Fashion'
2='Cosmetic';
value gender_fmt 1='Male'
2='Female'
run;
%macro TwoSampleProportionZTest(data=,dependent=,level=,group=,null=,altersign=,alpha=);
proc summary data=&data noprint;
class &dependent &group;
output out=temp(where=(_type_ in(1,3)));
run;
data temp;
set temp;
if &group=1 and _type_=1 then call symput("n1",_freq_);
if &group=2 and _type_=1 then call symput("n2",_freq_);
if &dependent=&level and &group=1 then call symput("n21",_freq_);
if &dependent=&level and &group=2 then call symput("n22",_freq_);
run;
%let p1=%sysevalf(&n21/&n1);%let p2=%sysevalf(&n22/&n2);
%let denominator=%sysfunc(sqrt(&p1*(1-&p1)/&n1+&p2*(1-&p2)/&n2));
%let z=%sysevalf((&p1-&p2-&null)/&denominator);
%let absz=%sysfunc(abs(&z));
%let Pz=%sysfunc(PROBNORM(&z));
%let pabsz=%sysfunc(PROBNORM(&absz));
%let halfalpha=%sysevalf((&alpha)/2);
%let prob=%sysfunc(probit(&halfalpha));
%let err=%sysfunc(sqrt(&p1*(1-&p1)/&n1+&p2*(1-&p2)/&n2)));
%let interval=%sysevalf(&err*&prob);
%let lower=%sysfunc(&p1-&p2+&interval);%let upper=%sysevalf(&p1-&p2-&interval);
%if &altersign='='%then %let p=(1-&pabsz)*2;
%if &altersign='<'%then %let p=&Pz;
%if &altersign='>'%then %let p=1-&Pz;
%let pvalue=%substr(&p,1,6);%let zvalue=%substr(&z,1,6);
%let p1value=%substr(&p1,1,6);%let p2value=%substr(&p2,1,6);
%let lowervalue=%substr(&lower,1,6);%let uppervalue=%substr(&upper,1,6);
%let confidence=%sysevalf(100*(1-&alpha));
data _null_;
file print;
put @17'Hypothesis Test for Two Sample Proportion Z Test:'/;
put @5'H1:P1-P2'"&altersign&null"/;
put @15"Preferred Level"@35"Proportion for &group" @58 "Z Value" @68 "P Value"; put @5"&dependent"@22"&level" @35"P1=&p1value" @45"P2=&p2value"@59"&zvalue"@68"&pvalue";
put//@12"&confidence""%Confidence Interval for Difference in Two Proportions:"/;
put@15"Preferred Level"@35"Lower Limit"@58"Upper Limit";
put@5"&dependent"@22"&level"@37"&lowervalue"@60"&uppervalue";
run;
%mend TwoSampleProportionZTest;
%TwoSampleProportionZTest(data=sasuser.magzine,dependent=gender,level=2,group=name,null=-0.10,altersign='>',alpha=0.05);
运行后,结果是
Hypothesis Test for Two Sample Proportion Z Test: H1:P1-P2'>'-0.10 Preferred Level Proportion for name Z Value P Value gender 2 P1=0.0666 P2=0.0666 2.1957 1- 95"%Confidence Interval for Difference in Two Proportions: Preferred Level Lower Limit Upper Limit gender 2 ),1,6) ,1,6) |
日志上显示这么几条错误,
ERROR: 未找到宏函数调用后期望的右括号。
ERROR: 未找到宏函数调用后期望的右括号。
ERROR: %SYSFUNC 或 %QSYSFUNC 宏函数引用中的函数名称缺失。
WARNING: 参数 3(宏函数 %SUBSTR 中)超出范围。
ERROR: 宏函数 %SUBSTR 的参数过少。
ERROR: 宏函数 %SUBSTR 的参数过少。
WARNING: 没有解析宏 CONFIDENCE 的调用。
想请大神们帮我看看哪里出了问题,该怎么改正。小弟新人,没有论坛币,还望大神们不吝赐教。