生成完整序列,给出SAS中的最小值和最大值?

时间:2015-03-04 16:58:33

标签: sas

所以我的数据看起来像这样

OBS _Seq_ 
1  15
2  16
3  20
4  22

我想要一个具有 Seq 完整序列的新数据集。所以像这样:

OBS _Seq_ 
1  15
2  16
3  17
4  18
5  19
6  20
7  21
8  22

我试过了。

data _null_;
set data;
%let minSeq = min(_Seq_);
%let maxSeq = max(_Seq_);
run;

data newSeq;
do sequence = &minSeq to &maxSeq;
output;
end;
run;

1 个答案:

答案 0 :(得分:1)

为了将数据步长值分配给宏变量,您需要使用call symput。读取第一行时_n_=1为真,而eof(由end=语句中的set选项初始化)表示数据集的最后一行。因此,假设您的数据按_seq_排序:

data _null_;
  set data end=eof;
  if _n_=1 then call symput('minSeq',put(_Seq_,20.));
  if eof   then call symput('maxSeq',put(_Seq_,20.));
run;