簡體   English   中英

SAS:將varlist傳遞給sas宏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM