楼主: yukai08008
1893 1

[学习分享] SAS数据集规则的自动生成_Andy的原创帖25 [推广有奖]

  • 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 论坛币
假设有一个数据集t1:
id

Var

low

up

cls
1

age

3

5

c1
2

age

5

8

c2
3

age

8

11

c3

[/table]我们希望给到任意一个数据集t2,比如:

[table=50%]
idage
123
23
34
48
510 可以用t1的上下限给t2的数据集标记类(cls).

简单一点,宏的循环我直接指定了,看官如果需要可以自己改。

第一步:生成if语句 (autop)
%macro autop;
data ot;
length sen $ 1000 ;
sen='';
stop;
run;
%do i=1 %to 3;
data tem;
set t1;
if _n_ = &i ;
call symput('var',var);
call symput('low',low);
call symput('up',up);
call symput('cls',cls);
run;
data tem1;
length sen $ 1000;
/*sen='if '||compress(symget('low'))||' < '||compress(symget('var'))||' <= '||compress(symget('up'))||' then '||"%sysfunc(cats(&var,_c))"||'='||"'"||compress(symget('cls'))||"'"||';';*/
sen=catx(' ','if',compress(symget('low')),'lt',compress(symget('var')),'le',compress(symget('up')),'then',
"%sysfunc(cats(&var,_c))",'=',"'",compress(symget('cls')),"'",';');
run;
proc append base=ot data=tem1 force;
run;
%end;
%mend;
%autop;

结果:
t1.png

第二步:生成一个外部sas文件 (ppp)
%let set=t2;
filename test 'e:\test.sas';
%macro ppp;
data _null;
set ot end=last;
file test;
if _n_=1 then put "data new; set t2;";
put sen;
if last then put 'run;';
run;
%mend;
%ppp


第三步:引用生成的文件
%include "e:\test.sas";


结果:
t2.png




二维码

扫码加我 拉你入群

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

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

关键词:sas数据集 自动生成 Andy 数据集 compress sas 规则生成 间接编程

沙发
18129380375 学生认证  发表于 2016-10-12 11:49:27 |只看作者 |坛友微信交流群
收藏

使用道具

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

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

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

GMT+8, 2024-4-20 18:41