【发布时间】: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