【问题标题】:Creating a macro to create dummy variables for categorical variables in my data set sas创建一个宏来为我的数据集 sas 中的分类变量创建虚拟变量
【发布时间】:2016-03-29 15:58:10
【问题描述】:

我编写了以下 SAS 代码来为我的所有分类变量创建虚拟变量。但是代码看不到给我想要的结果。

/#在工作库中创建数据集的副本#/

  libname eco "Z:\Globe\Call Data Modeling";
   data model_data;
   set eco.em_save_train;
   run;

/#获取数据集中变量的名称和类型

proc contents data= model_data out= var_names(keep=name type)noprint;
   run;

/#创建宏来创建虚拟变量编码#/

 %macro cat(indata, variable);
  proc sql noprint;
    select distinct &variable. into :mvals separated by '|'
    from &indata.;

    %let mdim=&sqlobs;
  quit;

  data &indata.;
    set &indata.;
    %do _i=1 %to &mdim.;
      %let _v = %scan(&mvals., &_i., |);
      if &variable. = &_v. then &variable.&_v. = 1; else &variable.&_v = 0;
    %end;
  run;
%mend;

/#调用宏并根据类型传递数据集名称和变量名称。如果 type=2 则为分类变量#/

data _null_;
set var_names;
if type=2 then call execute('%cat(model_data,'||name||')');
run;

【问题讨论】:

  • SAS 在大多数需要假人的过程中都有 CLASS 语句,当您确实需要创建假人时,SAS 也有相应的程序。 PROC GLMMOD 和 PROC TRANSREG 是很好的起点。
  • 不想要的结果是什么?更重要的是,想要的结果是什么?

标签: sas


【解决方案1】:

我不建议为此使用宏和数据步骤。 SAS 拥有出色的解决方案,可以完成所有繁重的工作。简单且有据可查。

data nominal;
    infile datalines dsd;
    input hair$ eye$;
datalines;
brown,brown
brown,blue
red,blue
red,brown
;;;;

proc transreg design;
   model class(hair eye / zero=none);
   output out=dummies(drop=_: intercept);
   run;
%put NOTE: Dummies: &=_TRGINDN &=_TRGIND;
proc print;
   run;

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多