楼主: yukai08008
1101 0

[学习分享] 数据集属性SAS宏代码_Andy的原创帖15 [推广有奖]

  • 2关注
  • 17粉丝

讲师

2%

还不是VIP/贵宾

-

威望
0
论坛币
2176 个
通用积分
3.0600
学术水平
10 点
热心指数
7 点
信用等级
7 点
经验
5915 点
帖子
120
精华
0
在线时间
556 小时
注册时间
2012-11-28
最后登录
2022-4-11

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币


作用:对数据集中的分类变量进行检查(字符型变量可能有重编码)
实现过程:利用freq过程以及元数据表的属性。

参数1:逻辑库名 参数2:数集名 参数3:指定的水平数
返回的数据集中创建了3个新的指示变量
1、id_indi 指示该变量可能为ID
2、ab_indi 指示该变量需要看一下(或者num型变量水平过少,或者char变量水平过多)
3、cls_indi 指示该变量按指定的水平数被归类为分类变量
%macro set_des(lib_n,set_n,nlev)/store;
ods output nlevels=t3;
proc freq data=&set_n nlevels;
tables _all_/noprint;
run;
proc sql;
create table set_des as
select t2.name,t2.type,t3.nlevels,t1.nobs,t3.nmisslevels  from
(select memname,nobs from sashelp.vtable
where libname=upper("&lib_n") and memname=upper("&set_n")) as t1
left join
(select memname,name,type from sashelp.vcolumn
where libname=upper("&lib_n") and memname=upper("&set_n")) as t2
on t1.memname=t2.memname
left join t3
on t2.name=t3.tablevar
;
quit;
data set_des;
set set_des;
if nlevels/nobs ge 0.95 then id_indi=1;
if type eq 'char' and nlevels ge &nlev then ab_indi=1;
else if type eq 'num' and nlevels le &nlev then ab_indi=1;
if nlevels le &nlev then cls_indi=1;
run;
proc sort data=set_des;
by descending id_indi descending ab_indi nlevels;
run;
proc print data=set_des;
run;
%mend;


二维码

扫码加我 拉你入群

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

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

关键词:SAS宏 Andy 数据集 left join proc sql tables 数据表 store

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 22:36