[英]SAS: passing varlist to sas macro
除了SUM,SAS確實缺少行功能。 我想對縱向數據集中的波動內的某些擴展缺失代碼進行計數。
我可以使用數組為每個wave處理一個硬編碼的varlist,但是我運氣不好能為每個wave調用一個宏。 問題似乎沒有辦法傳遞給varlist,尤其是如果使用first-last表示法。
data xxx;
input a b c d e f;
datalines;
1 2 3 4 5 6
.w .w .w .w .w .w
3 4 5 .w .w .w
;
run;
data yyy(drop=i); set xxx;
array wave1vars(*) a--c;
wave1count = 0;
do i = 1 to dim(wave1vars);
if wave1vars(i) = .w then wave1count = wave1count +1;
end;
array wave2vars(*) d--f;
wave2count = 0;
do i = 1 to dim(wave2vars);
if wave2vars(i) = .w then wave2count = wave2count +1;
end;
run;
為什么需要一個宏? 為什么不只使用多維數組。 除非每一波中的問題數量都不同?
missing w;
data have;
input a b c d e f;
cards;
1 2 3 4 5 6
w w w w w w
3 4 5 w w w
;;;;
data want ;
set have ;
array wavevars (2,3) a--c d--f ;
array wavecount (2) ;
do i=1 to dim(wavecount);
wavecount(i)=0;
do j=1 to dim2(wavevars);
wavecount(i)+.w = wavevars(i,j);
end;
end;
drop i j ;
run;
您還可以通過使用CATT()函數將值轉換為連接的字符串,然后計算在字符串中找到的W的數目,從而完全避免使用數組,例如:
343 data want;
344 input a b c d e f;
345 wave1count=countc(catt(of a--c),'W');
346 wave2count=countc(catt(of d--f),'W');
347 put _all_;
348 datalines;
a=1 b=2 c=3 d=4 e=5 f=6 wave1count=0 wave2count=0 _ERROR_=0 _N_=1
a=W b=W c=W d=W e=W f=W wave1count=3 wave2count=3 _ERROR_=0 _N_=2
a=3 b=4 c=5 d=W e=W f=W wave1count=0 wave2count=3 _ERROR_=0 _N_=3
NOTE: The data set WORK.WANT has 3 observations and 8 variables.
352 ;
353 run;
嘗試
wave1count = nmiss(of a--c);
wave2count = nmiss(of d--f);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.