| 
 | 
楼主
 
 
 楼主 |
发表于 2012-5-4 04:19:38
|
只看该作者
 
 
 
catx() function question in macro
我想得到mkt的任意组合值(根据ss给出的组合数字),比如ss=(1 4),那么我想得到mkts=(m1 m4); 比如ss=4,那么我想得到mkts=m4; 
比如ss=(1 3 4),那么我想得到mkts=(m1 m3 m4); 如果marks有超过1个以上值时,请用空格隔开. 
下面的code却总出现error,好像是catx()在macro里的用法有误,请高手指教,或者给出你的code。 
 
data a; 
input unid $ sales mkt $; 
cards; 
001 34500 m1 
001 4500  m2 
001 60900 m3 
001 1000  m4 
002 26600 m1 
002 1400  m2 
002 59000 m3 
002 1300  m4 
003 2000  m2 
003 17900 m3 
004 23000 m1 
; 
run; 
%macro a(ss=); 
%let s1=%str(m1 m2 m3 m4); 
%let mkts=''; 
 
%let n=%sysfunc(countw(&ss.)); 
%do i=1 %to &n.; 
 %do j=1 %to 4; 
  %if %scan(%str(&ss.),&i.)=&j. %then %do; 
   %let mkts=%sysfunc(catx('',&mkts.,%scan(&s1.,&j.))); 
  %end; 
 %end; 
%end; 
 
%put mkts=&mkts.; 
%mend; 
 
%a(ss=1 3) 
 
谢谢!!! |   
 
 
 
 |