SAS最大值变量

时间:2015-10-06 10:03:34

标签: dataset sas max identity

我有一个非常简单的问题。我有一个包含不同时间段行的数据集。每年都会向数据集添加一个新的时间段。 在我的数据集中,我有52,53和54期。很快将添加55期。 在下面的代码中,我从最新时期(54)中提取行:

data new;
set old;
if period=54;
run;

我希望SAS能够识别最大的时间段,而不是硬编码54(并且很快55),因此每次将新的时间段添加到数据集时,我都不必更正数字。我试过这个:

data new;
set old;
if period=max(period);
run;

但是max函数需要至少两个参数,这不是我想要的。任何人都可以告诉我使用哪种功能吗?

非常感谢。

亲切的问候玛丽亚

3 个答案:

答案 0 :(得分:1)

一种选择是使用macrovariable和proc sql步骤来获取maxperiod,例如:

proc sql;
select max(period) into: maxp from old;
quit;

data new;
set old;
if period = "&maxp"; 
run;

答案 1 :(得分:1)

您应该考虑将最后一个句点保留在数据集中,这样您每次需要访问数据时都不必计算它。还要在期间创建INDEX以优化检索。

25         options msglevel=i;
26         data example(index=(period)) lastperiod(keep=period);
27            set sashelp.class(in=in1) sashelp.class(in=in2) end=eof;
28            period = ifn(in1,54,55);
29            output example;
30            if eof then output lastperiod;
31            run;
32         
33         data _null_;
34            set period;
35            call symputx('LastPeriod',period);
36            run;
37         data period;
38            set example;
39            where period eq &lastperiod;
INFO: Index period selected for WHERE clause optimization.
40            run;

答案 2 :(得分:0)

使用PROC SQL可以轻松创建仅包含最新句点的旧子集:

PROC SQL NOPRINT;
  CREATE TABLE new AS
  SELECT *
    FROM old
   WHERE period = (SELECT MAX(period) FROM old);
QUIT;