SAS中文论坛

标题: 如何进行多分类应变量的Logistic回归分析 [打印本页]

作者: shiyiming    时间: 2005-10-31 06:40
标题: 如何进行多分类应变量的Logistic回归分析
请问如何进行多分类应变量的Logistic回归分析?

在应变量是有序变量的情况下,是否能赋值y为0,1,2,3,4...

谢谢
作者: shiyiming    时间: 2005-11-4 10:27
标题: 可以这样赋值
如果因变量是多值变量,可以得到多个模型进行分析
作者: shiyiming    时间: 2005-11-4 18:53
标题: 谢谢
谢谢你的指点

第一、按照你的意思,也就是:如果应变量为等级变量,不能赋值Y为0,1,2, 3......了。

第二、能否详细介绍你的方法。

谢谢。
作者: shiyiming    时间: 2005-11-11 00:13
标题: Re
最好是用proc rank……将其设置成哑变量后再分析,下面给出一段宏程序,可以一次对多个变量进行哑变量的设置,请各位指教。
[code:c4c45]%MACRO ranks(data,outdata=,var=,num=,byvar=,indicator=F);
options nodate nonumber;title;
%if &outdata= %then %do; %let outdata=&data; %end;
%local nqvar nqnum nq i j;
%let nqvar = %wordcnt(string=&var, delim=%str( ));
%let nqnum = %wordcnt(string=&num, delim=%str( ));
%if &nqvar>1 & &nqnum>1 & &nqvar^=&nqnum %then %do;
   %put ERROR: qvar, qnum not matching; endsas;
%end;
%if &nqvar=1 %then %do;%let nq = &nqnum;
  %do i=1 %to &nq;%let qvar&i = &var;%let qnum&i = %scan(&num, &i);%end;
%end;
%if &nqvar>1 %then %do; %let nq = &nqvar;
  %if &nqnum=1 %then %do;
    %do i=1 %to &nq;%let qnum&i = #%let qvar&i = %scan(&var, &i);%end;
  %end;
  %else %if &nqnum>1 %then %do;
   %do i=1 %to &nq;  
     %let qvar&i = %scan(&var, &i);%let qnum&i = %scan(&num, &i);
   %end;
  %end;
%end;  %*if &nqvar>1;
%if &byvar^= %then %do;proc sort data=&data; by &byvar;%end;
%do i=1 %to &nq;
  proc rank data=&data(keep=&byvar &&qvar&i) out=_out&i groups=&&qnum&i;
   var &&qvar&i; ranks &&qvar&i.&&qnum&i ;
   %if &byvar^= %then %do;by &byvar;%end;run;

   %if &byvar^= %then %do;proc sort data=_out&i;by &byvar;%end;
   proc univariate data=_out&i noprint;
     var &&qvar&i; class &&qvar&i.&&qnum&i;
     %if &byvar^= %then %do;by &byvar;%end;
     output out=_tmp1 n=n mean=mean std=std pctlpts=0 50 100 pctlpre=x;
   run;

   data _out&i; set _out&i; _tmpid=_n_;
   proc sort; by &byvar &&qvar&i.&&qnum&i;
   data _out&i; merge _out&i _tmp1(keep=&byvar &&qvar&i.&&qnum&i x50);
     by &byvar &&qvar&i.&&qnum&i;
     rename x50=&&qvar&i.&&qnum&i.._m;
   proc sort data=_out&i;by _tmpid;
   data _tmp1;set _tmp1;
     rank_var="&&qvar&i";rank=&&qvar&i.&&qnum&i;
     min=x0; median=x50; max=x100;
     keep rank_var rank n median min max mean std &byvar;run;
   %if &i=1 %then %do; data _tmpp;set _tmp1;run;%end;
   %else %do;data _tmpp;set _tmpp _tmp1;run;%end;
%end;
proc print data=_tmpp noobs;
  var &byvar rank_var rank n median min max mean std;run;   
data &outdata; merge &data %do i=1 %to &nq; _out&i %end;;drop _tmpid;
  %if &indicator=T %then %do;
    %do i=1 %to &nq;
     %do j=1 %to &&qnum&i;
       &&qvar&i.&&qnum&i..&j = (&&qvar&i.&&qnum&i=(&j-1));
     %end;
    %end;
  %end;
run;
%MEND ranks;
%MACRO ranks(aa,outdata=aaa,var=x1 x2 x3,num=2 2 2,byvar=sex,indicator=F);[/code:c4c45]




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2