楼主: lili83xu
6069 2

问个proc sql中传递宏变量的问题 [推广有奖]

  • 0关注
  • 0粉丝

已卖:138份资源

本科生

62%

还不是VIP/贵宾

-

威望
0
论坛币
2323 个
通用积分
0
学术水平
2 点
热心指数
2 点
信用等级
1 点
经验
1486 点
帖子
98
精华
0
在线时间
101 小时
注册时间
2006-10-21
最后登录
2022-3-4

楼主
lili83xu 发表于 2008-4-16 00:04:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

已知两数据集a和b,要求在b中找出满足a条件的数据。当然有很多种方法做,下面我用的是宏变量传递做sql查询。出现错误显示:The following columns were not found in the contributing tables: A.(and B)。我想错误可能在于name是字符变量,而macro main中传递过去的并不是字符变量,所以显示找不到匹配数据。
Q1:如何修改macro main能满足要求?
Q2:是否可以用hash object做表连接,如何写code?

data a;                                                                                                                                
input name $ ;                                                                                                                         
cards;                                                                                                                                 
A                                                                                                                                      
B                                                                                                                                      
;                                                                                                                                      
run;                                                                                                                                   
                                                                                                                                       
data b;                                                                                                                                
input name $ tt;                                                                                                                       
cards;                                                                                                                                 
A 1                                                                                                                                    
A 2                                                                                                                                    
A 3                                                                                                                                    
B 4                                                                                                                                    
B 5                                                                                                                                    
C 5                                                                                                                                    
C 7                                                                                                                                    
C 8                                                                                                                                    
;                                                                                                                                      
run;                                                                                                                                   
                                                                                                                                       
%macro main;                                                                                                                           
data _null_;                                                                                                                           
set a end=last;                                                                                                                        
call symput(('name'||compress(_n_)),name);                                                                                             
if last then call symput('num',_n_);                                                                                                   
run;                                                                                                                                   
%do i=1 %to #                                                                                                                      
proc sql;                                                                                                                              
select *                                                                                                                               
from b                                                                                                                                 
where name=&&name&i                                                                                                                    
;                                                                                                                                      
%end;                                                                                                                                  
quit;                                                                                                                                  
%mend main;                                                                                                                            
%main;

二维码

扫码加我 拉你入群

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

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

关键词:proc sql ROC sql Contributing following 变量 proc sql

回帖推荐

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

%macro main;                                                                &nbs ...

本帖被以下文库推荐

沙发
olover 发表于 2008-4-16 01:42:00
%macro main;                                                                                                                           
data _null_;                                                                                                                           
set a end=last;                                                                                                                        
call symput(('name'||compress(_n_)),name);                                                                                             
if last then call symput('num',_n_);                                                                                                   
run;                                                                                                                                   
%do i=1 %to #                                                                                                                      
proc sql;                                                                                                                              
select *                                                                                                                               
from b                                                                                                                                 
where name="&&name&i";       /*addd quote here*/                                                                                                                                
%end;                                                                                                                                  
quit;                                                                                                                                  
%mend main;                                                                                                                            
%main;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

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

藤椅
lili83xu 发表于 2008-4-16 12:29:00

谢谢。

加过单引号,不对,原来是双引号阿。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 10:16