SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 750|回复: 4
打印 上一主题 下一主题

请问变量在数据步和宏之间的数值传递

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2006-5-18 12:41:00 | 只看该作者

请问变量在数据步和宏之间的数值传递

刚刚上手SAS, 这两天被搞的焦头烂额。

比如说下面:
Data _NULL_;
set a;
retain cc 1;
%deliver;

%Macro deliver;
data _NULL_;
set b;
put cc;
%Mend deliver;
run;
如果这样的话宏里面的cc是没有值的, 数据部的cc=1的值是不会传到宏里面去的.



但是写成
Data _NULL_;
set a;
retain cc 1;
%deliver;

%Macro deliver;
put cc;
%Mend deliver;
run;
这样就可以把cc=1列印出来. 所以我很奇怪究竟是怎么回事.



其实问题的关键是我有两个dataset, set a 和set b, 两个dataset是相关联的. 我想在set a中取值后再在set b中定位相同值的records, 再把这些records放在set c中, 我只想到用宏这样的笨方法. 有没有什么其它方法? 一定要用sql一类的东西?
谢谢.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2006-5-18 15:13:09 | 只看该作者

@

i think sql is the simplest way.

[code:03c48]data a;
input id$ x;
cards;
a1 12
a2 23
;
run;

data b;
input id$ y;
cards;
b1 12
b2 99
b3 45
;
run;

proc sql;
create table c as select * from a ,b
where a.x=b.y;
quit;[/code:03c48]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2006-5-18 18:19:35 | 只看该作者

执行时间

你没有搞明白两个问题,一个是数据步的执行时机,另外一个是宏执行时机。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2006-5-22 23:48:27 | 只看该作者

RE

(1) "究竟是怎么回事 数据部的cc=1的值是不会传到宏里面去的"
       Because  宏里面有 <data _NULL_;> which causes a seperated data steps.  The 宏 can be changed to as below

%Macro deliver;
set b;
put cc;
%Mend deliver;


(2)其它方法 to join datasets by 定位相同值的records only.

data c;
  set a;
  set b;
  retain cc 1;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2006-5-23 00:05:22 | 只看该作者

RE

By the Way, forgot to mention that making宏statement  should be moved to before its 执行时机.
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-10 05:50 , Processed in 0.112424 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表