【问题标题】:SAS Regression by class variable按类变量进行 SAS 回归
【发布时间】:2014-08-18 17:45:57
【问题描述】:

我希望根据分类变量的值有条件地执行多重回归。因此,举一个简单的例子,考虑 sashelp.class 数据。我需要对男性和女性进行回归。由于我的数据集有更多的部门并且更大,因此我首先将不同的类型输入到宏变量中:

proc sql;
    select count(distinct Sex) into :numsex
    from sashelp.class;
    %let numsex=&numsex;
    select distinct Sex into :sex1 - :sex&numsex
    from sashelp.class;
quit;

然后我尝试通过循环遍历每个对象来执行回归。我知道注释掉的代码有效,但不确定为什么我的宏函数不起作用。

/**/
/*data dataF;*/
/*  set sashelp.class;*/
/*  where Sex='F';*/
/*run;*/
/**/
/*proc reg data=dataF outest=out1;*/
/*  model Height=Weight;*/
/*run;*/

%macro regress;
%do i = 1 %to &numsex;

data data&&sex&i;
    set sashelp.class;
    where Sex='&&sex&i';
run;

proc reg data=data&&sex&i outest=out&i;
    model Height=Weight;
run;
%end;
%mend;
%regress;

另外,如果有更好的方法来做到这一点,那么我会全力以赴。当前的方法很痛苦,因为我必须将我所有的估计输出集组合起来以获得一个数据集。此外,我得到了一堆我不想要或不需要的中间数据集。

谢谢。

【问题讨论】:

    标签: macros sas


    【解决方案1】:

    通常 BY 组是执行此操作的最佳方式,不确定这是否正是您要寻找的:

    proc sort data=sashelp.class out=class;
    by sex;
    run;
    
    proc reg data=class outest=out1;
      by sex;
      model Height=Weight;
    run;
    

    您的宏失败,因为单引号停止了宏变量解析(即,'&sex' 不能用于获取 'F';您必须使用 "&sex" 来获取 "F"。)

    【讨论】:

    • 谢谢,乔。我不知道我为什么要让这件事变得如此困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2019-04-13
    • 2019-05-22
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2013-11-14
    相关资源
    最近更新 更多