我正在使用以下数据集
data have;
input repricingdate1-repricingdate3;
datalines;
'30SEP2019'd '31DEC2020'd '31MAR2022'd
'31DEC2020'd '30JUN2023'd '31DEC2025'd
;
run;
请问如果这不是输入日期的正确方法,我不确定,但是我有一个使用intnx函数使用这些值的表
我正在寻找创建一个变量“ Flag”,如果重新定价日期与Flag Year相匹配,则该变量将返回'1',即第一行Flag(2019)= 1,两行Flag(2020)= 1,依此类推。
我正在使用下面的代码,看不到我的错误所在,它甚至在较大的数据集中拾取了几行,但是是偶发的
data want;
set have;
array flag(2018:2021) flag2018-flag2021;
array repricingdate(1:3);
do i = 2018 to 2021;
do j = 1 to 3;
if put(repricingdate(j), 4.) = compress(vname(flag(i)),, 'kd')
then flag(i)=1;
end;
end;
drop i;
run;
如果有人能指出我的错误,我将不胜感激,谢谢。
答案 0 :(得分:0)
我不知道您的错误在哪里,但是您可以通过查找年份并将其设置为1而不是循环遍历,来大大简化这一过程。
data want;
set have;
array flag(2018:2021) flag2018-flag2021;
array _date(1:3);
*set all to 0 initially;
do i=lbound(flag) to hbound(flag);
flag(i)=0;
end;
do i = 1 to 3;
year_data=year(_date(i));
flag(year)=1;
end;
drop i;
run;
编辑:
您的错误在这里:
put(repricingdate(j), 4.)
->这不会产生年份值。
如果要年份,请使用YEAR函数
year(repricingdate(j))
这假设您的日期实际上是SAS日期。如前所述,您的演示代码