变量的SAS最大值
SAS max value of a varible
我有一个可能非常简单的问题。我有一个包含不同时间段行的数据集。每年都会向数据集中添加一个新的时间段。
在我的数据集中,我有周期 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 函数至少需要两个参数,这不是我想要的。谁能告诉我应该改用哪个函数?
非常感谢。
此致玛丽亚
一种选择是使用宏变量和 proc sql 步骤来获取最大周期,例如:
proc sql;
select max(period) into: maxp from old;
quit;
data new;
set old;
if period = "&maxp";
run;
使用 PROC SQL:
可以轻松创建仅包含最新时期的旧时期的子集
PROC SQL NOPRINT;
CREATE TABLE new AS
SELECT *
FROM old
WHERE period = (SELECT MAX(period) FROM old);
QUIT;
您应该考虑将最后一个周期保留在数据集中,这样您就不必在每次需要访问数据时都计算它。同时创建一个 INDEX on period 以优化检索。
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;
我有一个可能非常简单的问题。我有一个包含不同时间段行的数据集。每年都会向数据集中添加一个新的时间段。 在我的数据集中,我有周期 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 函数至少需要两个参数,这不是我想要的。谁能告诉我应该改用哪个函数?
非常感谢。
此致玛丽亚
一种选择是使用宏变量和 proc sql 步骤来获取最大周期,例如:
proc sql;
select max(period) into: maxp from old;
quit;
data new;
set old;
if period = "&maxp";
run;
使用 PROC SQL:
可以轻松创建仅包含最新时期的旧时期的子集PROC SQL NOPRINT;
CREATE TABLE new AS
SELECT *
FROM old
WHERE period = (SELECT MAX(period) FROM old);
QUIT;
您应该考虑将最后一个周期保留在数据集中,这样您就不必在每次需要访问数据时都计算它。同时创建一个 INDEX on period 以优化检索。
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;