是否可以在elasticnet(SAS)中使用'where'语句?

时间:2014-05-02 18:16:31

标签: sas

以下是我用于变量选择的代码:

proc glmselect data=abct; 
  where incex1=1;  
  title 'GLMSELECT with Elastic Net';
  model devmood_c = asetot age yrseduc sex employyn cohabyn caucyn asitot penntot 
                    anxdis ahealthuse ahospit ventxpwk acmn nhospit bmi comorb 
                    aqllimmn aqlsubmn aqlsympmn aqlemotmn aqlenvirmn aqltotmn 
                    smoke3gp nalcwkcurr
                    /selection=elasticnet(steps=120 L2=0.001 choose=validate); 
run;

问题在于,当我运行它时,它会告诉我:

  

错误:变量incex1不在文件WORK.ABCT。

incex1变量用于排除数据库中特定问题得分过高的人。它适用于LASSO,但即使代码相似,似乎也不适用于elasticnet。

是否有人知道如何使用它,或者是否有其他方法可以排除在问卷调查中得分低于某个阈值的患者?

这是incex1的编码方式:

if devmood_c = 0 then incex1=1;
if devmood_c = 1 then incex1=1;
if devmood_c = . then incex1=0;
if bdisev > 2 then incex1=0;
label incex1 = "1=no mood at baseline or BDI > 20, 0=excluded";

1 个答案:

答案 0 :(得分:1)

这适用于测试数据,因此您的源数据可能不具备您期望的特征。例如,

ods graphics on;
proc glmselect data=sashelp.Leutrain valdata=sashelp.Leutest
               plots=coefficients;
where x1>0;
  model y = x2-x7129/
        selection=elasticnet(steps=120  l2=0.001 choose=validate);
run;

按预期工作。