楼主: parnwang
1853 6

[原创博文] 求解SAS程序的MACRO [推广有奖]

  • 0关注
  • 2粉丝

博士生

3%

还不是VIP/贵宾

-

威望
0
论坛币
201 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2568 点
帖子
209
精华
0
在线时间
88 小时
注册时间
2006-6-28
最后登录
2020-10-29

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
程序目的: 从a中读取字段b ,将其与C中的字段b进行比较,如相等,返回c数据集中的字段c,使其添加到a数据集中
请问下面程序是否正确?
data a;
input a b;
cards ;
1 20090202
2 20090404
;run;
data b;
input b c;
cards;
20090303 2
20090202 4
20090404 5
;run;
%global tt;
%global rat;
option mprint;
%macro a(kk);

data e;
set b;
if &kk=b then rat=c;
run;
%mend a;
data c /debug;
set a;
call symput('tt',b);
%a(&tt);
c=rat;
run;
二维码

扫码加我 拉你入群

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

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

关键词:Macro sas程序 CRO acr Mac option 程序

回帖推荐

lyfyb99 发表于7楼  查看完整内容

这类问题在数据量极大时最好用Hash object解决,可极大的节省资源。 data match ; if 0 then set b ; dcl hash hh (dataset: 'work.b') ; hh.DefineKey ( 'b' ) ; hh.DefineData ( 'c' ) ; hh.DefineDone () ; do until ( eof2 ) ; set a end = eof2 ; rc=hh.find () ; if rc= 0 then output ; else output; end ; stop ; run ;

david0 发表于2楼  查看完整内容

用sql更简单些: data x; input a b; cards ; 1 20090202 2 20090404 ;run; data y; input b c; cards; 20090303 2 20090202 4 20090404 5 ;run; proc sql; select x.*,y.c from x left join y on x.b=y.b ; quit;

本帖被以下文库推荐

沙发
david0 发表于 2009-7-15 02:02:29 |只看作者 |坛友微信交流群
用sql更简单些:
data x;         
input a b;      
cards ;         
1 20090202      
2 20090404      
;run;
         
data y;         
input b c;      
cards;         
20090303 2      
20090202 4      
20090404 5      
;run;     

proc sql;
select x.*,y.c
from x left join y
on x.b=y.b
;
quit;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

藤椅
david0 发表于 2009-7-15 02:04:48 |只看作者 |坛友微信交流群
输出到新的数据集a_new:
proc sql;
create table a_new as
select x.*,y.c
from x left join y
on x.b=y.b
;
quit;

使用道具

板凳
parnwang 发表于 2009-7-15 14:19:32 |只看作者 |坛友微信交流群
3# david0
谢谢解答
但是我要处理的数据将是百万条记录的数据集,因而用SQL会比较耗时,而且我也想知道为什么我用MACRO将一个数据集中的字段值返回到另一个数据集中,只能返回符合条件的最后一条记录,而不是全部。

使用道具

报纸
sushe1527 发表于 2009-7-15 14:36:29 |只看作者 |坛友微信交流群
parnwang 发表于 2009-7-15 14:19
3# david0
谢谢解答
但是我要处理的数据将是百万条记录的数据集,因而用SQL会比较耗时,而且我也想知道为什么我用MACRO将一个数据集中的字段值返回到另一个数据集中,只能返回符合条件的最后一条记录,而不是全部。
就本例来说 有证据表明宏会比SQL快么?

使用道具

地板
parnwang 发表于 2009-7-15 15:54:12 |只看作者 |坛友微信交流群
没有,因为这是实验性数据,只为验证上述编写的程序。

使用道具

7
lyfyb99 在职认证  发表于 2010-1-8 14:41:49 |只看作者 |坛友微信交流群
这类问题在数据量极大时最好用Hash object解决,可极大的节省资源。
data match ;
if 0 then set b ;
dcl hash hh (dataset: 'work.b') ;
hh.DefineKey ( 'b' ) ;
hh.DefineData ( 'c' ) ;
hh.DefineDone () ;

do until ( eof2 ) ;
set a end = eof2 ;
rc=hh.find () ;
if rc= 0 then output ;
else output;
end ;
stop ;
run ;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

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

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

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

GMT+8, 2024-5-1 14:10