In that case, you can also add some logic and have it done in the step of Proc SQL: proc sql; create table want as select *, (select std(prc) from _o_1 where co_num=a.co_num and year=a.year) as ste_1_year ,(select case when count (distinct year) >1 then std(prc) else . end from _o_1 where co_num=a.co_num and a.year-1 <= year<=a.year) as ste_2_year ,(select case when count (distinct year) >2 then std(prc) else . end from _o_1 where co_num=a.co_num and a.year-2 <= year<=a.year) as ste_3_year ,(select case when count (distinct year) >3 then std(prc) else . end from _o_1 where co_num=a.co_num and a.year-3 <= year<=a.year) as ste_4_year ,(select case when count (distinct year) >4 then std(prc) else . end from _o_1 where co_num=a.co_num and a.year-4 <= year<=a.year) as ste_5_year from _o_2 a ; quit; Good Luck, Haikuo BTW: Your data step used for clean up is not robust enough. What if you do have identical Stds across multiple years?
... View more