SAS中生成哑变量的一段宏代码

本文介绍了如何在SAS中通过宏代码将分类变量转换为哑变量。提供了一段自定义宏`categorical_to_binary`,该宏处理数据集中的指定变量,将其分类转化为二元变量。在建模时,这种转换对于处理分类数据至关重要。宏代码首先创建临时数据集,然后根据分类创建新变量,并通过if-else语句设置新变量的值。转换过程中需要注意变量名合法性及是否保留原始目标变量。
摘要由CSDN通过智能技术生成

我们在建模时,可能经常会有一些将分类变量(categorical variable)转换成哑变量(dummy variable)的需求。例如“成绩”是一个分类变量,内容包含“优,良,中,差”四个分类,转换成哑变量之后,新生成了四个二元变量(binary variable),每个变量只有0和1两个值,通常0表示“否”,1表示“是”。貌似SAS中没有生成哑变量的过程步,因此自己写了一段宏实现了这个功能,代码如下:

data test;
input id $ class $;
datalines;
1 one
2 two
3 three
4 four
5 one
6 three
7 one
8 two
9 four
10 two
;
run;


*
ds_name--你要处理的数据集,这个数据集包含你要处理的变量。
target_var--你要处理的变量,可以是数值型也可以是文本型
;


options symbolgen mprint mlogic mcompile;  /*显示宏代码运行细节的代码,可加可不加*/
%macro categorical_to_binary(ds_name, target_var);
proc tabulate data=&ds_name. missing out=work.temp;  /*首先将变量的所有分类放入一个临时数据集*/
class &target_var.;
table &target_var.;
run;
data work.temp;  /*根据变量内容,建立新变量的变量名,即"target_var"+"_"+"变量内容" */
set work.temp;
&target_var._prefix = cats("&target_var.", '_', &target_var.);
keep &target_var. &target_var._prefix;
run;
%let dsid=%sysfunc(open(work.temp));
%let category_cnt=%sysfunc(attrn(&dsid.,nobs));
%let rc=%sysfunc(close(&dsid.));
proc sql;  /*将变量分类和新变量名放入2个宏变量*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值