全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5966 2
2008-04-16

已知两数据集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;

二维码

扫码加我 拉你入群

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

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

全部回复
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;
二维码

扫码加我 拉你入群

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

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

2008-4-16 12:29:00

谢谢。

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

二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群