【发布时间】:2020-04-12 12:24:16
【问题描述】:
[我有这段代码。但是,由于循环 t 从 1 到 310,proc 单变量中的宏生成了太多单独的数据集。如何修改此代码以将所有 proc 单变量输出包含到一个数据集中,然后修改其余代码以更有效地运行? ]
%let L=10; %* 10th percentile *;
%let H=%eval(100 - &L); %* 90th percentile*;
%let wlo=V1&L V2&L V3&L ;
%let whi=V1&H V2&H V3&H ;
%let wval=wV1 wV2 wV3 ;
%let val=V1 V2 V3;
%macro winsorise();
%do v=1 %to %sysfunc(countw(&val));
%do t=1 %to 310;
proc univariate data=regressors noprint;
var &val;
output out=_winsor&t._V&v pctlpts=&H &L
prtlpre=&val&t._V&v;
where time_count<=&t;run;
%end;
data regressors (drop=__:);
set regressors;
if _n_=1 then set _winsor&t._V&v;
&wval&t._V&v=min(max(&val&t._V&v,&wlo&t._V&v),&whi&t._V&v);
run;
%end;
%mend;
谢谢。
【问题讨论】:
-
time_count是整数吗?当您的regressors数据从条件time_count < 1变为条件time_count < 310时,您要处理多少行?如果每个整数都为 1:310,则 310 个不同 time_count 范围的数据可以三角形“堆叠”成 310 个不同的组,行数为 1,2,3,...310。 310 行将爆炸为 48,205 行 ( = 310 * 311 / 2 ),但可以使用BY语句进行处理。
标签: sas