如何在编译期间获取数组大小?

时间:2015-05-25 02:30:05

标签: sas

我有一个数据集,其中包含如此

的参数
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在编译时知道如何设置阵列?

1 个答案:

答案 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.;