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