将观察值添加到表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;