全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 经管百科 爱问频道
1316 0
2015-08-18
以下是我用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);
运行后,结果是
SAS 系统

                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 的调用。

想请大神们帮我看看哪里出了问题,该怎么改正。小弟新人,没有论坛币,还望大神们不吝赐教。



二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群