2014-06-29 54 views
1

我想從另一個表中存儲每個變量的計數值。我想在它的變量列表中使用循環。因此,首先,我存儲在變量名中的「瓦爾」,這樣做:sas如何使用列表來存儲表中的所有變量的計數不同數

proc sql ; 
select name 
into :vars separated by ' ' 
from dictionary.columns 
where libname eq 'HW' and 
memname eq "ORDERS"; 
quit; 

然後,我創建了另一個列表與計數明顯與下面的代碼的結果:

%macro g(); 
%let b=; 
%do i = 1 %to 3; 
%let a=%scan(&vars,&i); 
    proc sql; 
    select count(distinct &a) 
    into :gaby from hw.ORDERS; 
    quit; 
    %let b=&b &gaby; 
%end; 
%put &b; 
%mend g; 

%g(); 

在此之後,我想添加到一個表中,但我可以添加變量變量而不是b變量。

data a; 
call symput('lista', symget('vars')); 
call symput('lista1', symget('b')); 
do i=1 to 3; 
    timept=i; 
    variable=scan("&vars",i); 
    dist=scan("&b",i); 
output; 
end; 
run; 

該表正確顯示了變量的名稱,但不是顯示計數不同(存儲在b中)顯示字母「b」。

有沒有辦法執行此操作?另外,有沒有一種方法可以輕鬆執行?

謝謝!!!!!!!!!!

回答

1

你很近。我只需要使用一個SQL pass並直接創建一個輸出表。如果您需要列表形式,請使用PROC TRANSPOSE

proc sql noprint; 
select name 
into :vars separated by ' ' 
from dictionary.columns 
where libname eq 'SASHELP' and 
memname eq "SHOES"; 
quit; 

%put &vars; 

%macro create_table(); 
proc sql noprint; 
%local i n var; 
%let n = %sysfunc(countw(&vars)); 

create table output as 
select 
%do i=1 %to %eval(&n-1); 
    %let var = %scan(&vars,&i); 
    count(distinct &var) as &var, 
%end; 
    %let var = %scan(&vars,&n); 
    count(distinct &var) as &var 
from sashelp.shoes; 
quit; 
%mend; 

%create_table; 

proc transpose data=output out=want(rename=(_NAME_=variable COL1=Dist)); 
run; 
+0

INGENIOUS!謝謝! – GabyLP

相關問題