簡體   English   中英

將觀察添加到表 SAS 的末尾

[英]Add observation to the end of the table SAS

假設我有一張像這樣的桌子:

Z 25  26  27 ... 100
0 300 200 200    100
1 278 262 177     45
2 168 222 122     22

(第一行也是標題)。

現在我想在我的表中添加更多 20 個觀察值:

Z 25  26  27 ... 100
0 300 200 200    100
1 278 262 177     45
2 168 222 122     22
3 84  111  61     11
...
22 84  111  61     11

所以(Z=3 到 22 的所有觀察)=(Z = 2 的觀察)* 1/2。 有沒有辦法做到這一點?

特殊變量名列表_numeric_用於排列所有數值變量。 對該數組的循環將允許您將所選行的每個變量除以2

例子:

data have;
input Z _25  _26  _27 _100;
datalines;
0 300 200 200    100
1 278 262 177     45
2 168 222 122     22
run;

data newrows(drop=last_z);
  set have nobs=nobs point=nobs;   * read last row;

  last_z = z;

  array _ _numeric_;               * array all numeric variables;

  do _n_ = 1 to dim(_);            
    _(_n_) = _(_n_) / 2;           * divide each variable by 2;
  end;

  do z = last_z + 1 to last_z + 20;  * output 20 'new' rows;
    output;  
  end;

  stop;
run;

proc append base=have data=newrows;
run;

需要明確的是,SAS 變量名不能是數字。 然而,這給了你你想要的

data have;
input z a b c;
datalines;
0 300 200 200
1 278 262 177
2 168 222 122
;

data want;
   set have end=lr;
   array arr a--c;
   output;
   if lr;
   do over arr;
      arr = arr / 2;
   end;
   do _N_ = 1 to 20;
      z + 1;
      output;
   end;
run;

更新代碼:

data have;
   do z = 0, 1, 2;
      array arr _25-_100;
      do over arr;
         arr = ceil(rand('uniform')*100);
      end;
      output;
   end;
run;

data want;
   set have end=lr;
   array arr _25--_100;
   output;
   if lr;
   do over arr;
      arr = arr / 2;
   end;
   do _N_ = 1 to 20;
      z + 1;
      output;
   end;
run;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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