%global returnCode; *delete the %let returncode=; data prods; length product_type $ 12; input count product_type $; datalines; 9 Firebird 4 Trails ; run; data outputdata; length product_type $ 12; input product_type $; datalines; Firebird Trails ; run; %macro prodrow_lookup(prod=); proc sql noprint; select count into :returnCode from prods where strip(product_type) = "&prod";quit; %mend prodrow_lookup; %macro main_macro(data=); %local dsid rc rownum rows cols; %let dsid = %sysfunc(open(&data)); %let rows=%sysfunc(attrn(&dsid,nobs)); %let cols=%sysfunc(attrn(&dsid,nvars)); data _null_; %do %while (%sysfunc(fetch(&dsid)) = 0); /* outloop across rows */ %do c = 1 %to &cols; /* inner loop acrodd columns of a given rows */ %local v t &v; %let v = %sysfunc(varname(&dsid,&c)); %let t = %sysfunc(vartype(&dsid, &c)); %let d = %sysfunc(getvar&t(&dsid, &c)); %if &c = 1 %then %do; /* if I find a specific column, then execute macro prodrow_lookup */ call execute('%prodrow_lookup(prod=&d)'); %put **** returnCode = &returnCode; /* print the output of prodrow_lookup */ %end; %end; %end; %let rc = %sysfunc(close(&dsid)); run; quit; %mend main_macro; %main_macro(data=work.outputdata);
... View more