搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  多选题变二分类.rar
资料下载链接地址: https://bbs.pinggu.org/a-595758.html
本附件包括:
  • 多选题变二分类.sas
附件大小:
580 Bytes   举报本内容
sas是个很强大的软件,我从接触到现在有4年时间了,期间间断的在学习中用到,本人不是专业统计人士,只是需要的时候用到,临时研究研究,所以本人水平一直不稳定 。好,闲话不多说了,回归正题。
在科研资料处理中我经常会遇到问卷中多选题的问题,如下面这个数据集:
data a;
input id x ;
cards;
1 123
2 234
3 134
4 14
5 24
6 45
7 12
8 135
9 1
;
run;

变量X是问卷中的多选题,有5个选项,录入时图方便,选择ABC,就录入成123……,现在想对其进行处理,就必需将其二分类化,最早的时候我是这样做的:

data a_new;
set a;
x1=index(x,'1'); /*INDEX(s,s1) 查找s1在s中出现的位置。找不到时返回0。*/
x2=index(x,'2'); /*引号不可少*/
x3=index(x,'3');
x4=index(x,'4');
x5=index(x,'5');
run;
data a_new1;
set a_new;
if x1^=0 then x1=1;
if x2^=0 then x2=1;
if x3^=0 then x3=1;
if x4^=0 then x4=1;
if x5^=0 then x5=1;
run;

后来随着我sas水平的提高,将程序进行了精简:
data a_new;
set a;
if index(x,'1')^=0 then x1=1; else x1=0;
if index(x,'2')^=0 then x2=1; else x2=0;
if index(x,'3')^=0 then x3=1; else x3=0;
if index(x,'4')^=0 then x4=1; else x4=0;
if index(x,'5')^=0 then x5=1; else x5=0;
run;

再后来,我接触了sas的宏编程技术,就有了把处理过程编程一个宏程序的想法,这样可以改个参数,直接调用即可,现将程序分享如下:
%let data=a; /*数据集名称*/
%let v=x; /*变量名*/
%let m=5; /*多选项数*/
%macro dx;
data &data._new;
set &data;
%do i=1 %to &m;
if index(&v,"&i")^=0 then &v&i=1;else &v&i=0; /*一定要用双引号*/
%end;
run;
%mend;
%dx;
上面这段程序,只要改变“%let” 部分三个参数,全选运行就可以达到分变量的效果。

最后,将上述sas程序提供给大家下载,欢迎sas高手们指教,看能不能有更好的方法,或者再精简程序。


    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

GMT+8, 2026-1-16 18:31