我有一个数据集,其中包含如此
的参数Parameters
year threshold1 threshold2
1 100 200
2 150 300
....
7 200 390
我能做到
data output;
set input;
if 0 then set set parameters;
array thresholds [2] thresholds:;
%do year = 1 %to 7;
year = &year.;
set parameters point=year;
array my_thresholds&year. [2] _temporary_;
do i = 1 to 2;
my_thresholds&year.[i] = thresholds[i];
end;
%end;
对于INPUT中的每个观察,这将作为变量每年的threshold1 threshold2并为my_thresholds&year
设置数组。抱着每一个。
但问题是,阈值的数量是未知的。我无法dim(thresholds)
或*
。
如何让SAS在编译时知道如何设置阵列?
答案 0 :(得分:3)
据我所知,你无法在编译时动态设置数组的大小。
完成此任务的一种可能性是使用proc内容和proc sql来计算参数数据集中有多少个阈值参数,然后通过宏变量将该信息传递给数据步骤。
data parameters;
do year=1 to 7;
threshold1 = 1;
threshold2 = 2;
threshold3 = 3;
output;
end;
run;
proc contents data=parameters out=cont noprint;
run;
proc sql noprint;
select count(*) into :thr_count
from cont
where name like "threshold%";
quit;
%put &thr_count.;