我有数据,其中变量系统地命名为fr(yyyy),并且只有1个观察值。我认为它是一个函数fr(yyyy)= x。在某些时候,这个函数变得不变,我想让一个宏变量等于函数恒定的第一年。数据从2016年到2078年。以下是它的外观示例;
此数据的正确答案是short_end = 2021。
这是我的尝试;
%let fundyr = 2017;
%let endyr = 2078;
data test;
set disc_rates;
ARRAY fr{%eval(&fundyr.-1):&endyr.} fr%eval(&fundyr.-1)-fr&endyr.;
do i = &fundyr. to &endyr.;
if fr(i) ne fr(i-1) then do j = i to (&endyr.-i);
if and(fr(i) = fr(j)) then short_end = i;
end;
end;
run;
我认为逻辑上它是有意义的(但它可能还是非常正确),但是没有和()函数将会'和'一起编辑任意数量的逻辑语句。关于如何克服这个问题或采用不同方法的任何建议?另外,如果找到这个变量的宏变量怎么办?
如果你需要一些数据,可以用它来创建一些
data disc_rates;
fr2017 = 0.1;
fr2018 = 0.2;
fr2019 = 0.3;
fr2020 = 0.4;
fr2021 = 0.3;
fr2022 = 0.3;
fr2023 = 0.3;
fr2024 = 0.3;
run;
答案 0 :(得分:4)
向后遍历数组 。
data disc_rates;
fr2017 = 0.1;
fr2018 = 0.2;
fr2019 = 0.3;
fr2020 = 0.4;
fr2021 = 0.3;
fr2022 = 0.3;
fr2023 = 0.3;
fr2024 = 0.3;
run;
data want;
set disc_rates;
array fr[*] fr2017-fr2024;
final_rate = fr[dim(fr)];
do _i = dim(fr) to 1 by -1;
if fr[_i] ne final_rate then leave;
end;
final_rate_index = _i+1; *_i will be highest non-identical; _i+1=lowest identical;
Final_rate_year = vname(fr[final_rate_index]);
run;