如何使用比此PROC SQL查询更简洁的数据步骤创建下表?
proc sql;
insert into classdata
(t0avgStakeRank, eventtime, previousnode)
values(0, 1, '')
values(0, 2, 'L')
values(0, 2, 'W')
values(0, 3, 'LL')
values(0, 3, 'LW')
values(0, 3, 'WL')
values(0, 3, 'WW')
values(0, 4, 'LLL')
values(0, 4, 'LLW')
values(0, 4, 'LWL')
values(0, 4, 'LWW')
values(0, 4, 'WLL')
values(0, 4, 'WLW')
values(0, 4, 'WWL')
values(0, 4, 'WWW')
values(0, 5, 'LLLL')
values(0, 5, 'LLLW')
values(0, 5, 'LLWL')
values(0, 5, 'LLWW')
values(0, 5, 'LWLL')
values(0, 5, 'LWLW')
values(0, 5, 'LWWL')
values(0, 5, 'LWWW')
values(0, 5, 'WLLL')
values(0, 5, 'WLLW')
values(0, 5, 'WLWL')
values(0, 5, 'WLWW')
values(0, 5, 'WWLL')
values(0, 5, 'WWLW')
values(0, 5, 'WWWL')
values(0, 5, 'WWWW')
values(1, 1, '')
values(1, 2, 'L')
values(1, 2, 'W')
values(1, 3, 'LL')
values(1, 3, 'LW')
values(1, 3, 'WL')
values(1, 3, 'WW')
values(1, 4, 'LLL')
values(1, 4, 'LLW')
values(1, 4, 'LWL')
values(1, 4, 'LWW')
values(1, 4, 'WLL')
values(1, 4, 'WLW')
values(1, 4, 'WWL')
values(1, 4, 'WWW')
values(1, 5, 'LLLL')
values(1, 5, 'LLLW')
values(1, 5, 'LLWL')
values(1, 5, 'LLWW')
values(1, 5, 'LWLL')
values(1, 5, 'LWLW')
values(1, 5, 'LWWL')
values(1, 5, 'LWWW')
values(1, 5, 'WLLL')
values(1, 5, 'WLLW')
values(1, 5, 'WLWL')
values(1, 5, 'WLWW')
values(1, 5, 'WWLL')
values(1, 5, 'WWLW')
values(1, 5, 'WWWL')
values(1, 5, 'WWWW');
quit;
这是我想做的事情:
DATA FOO;
DO t0avgStakeRank=0,1;
DO eventtime=1,2,3,4,5;
previousnode = cats(previousnode,'L');
previousnode = cats(previousnode,'W');
END;
END;
END;
proc print;run;
它是在宏中完成的,所以我不能使用DATALINES或CARDS。
答案 0 :(得分:1)
利用您只是复制二进制进程但具有不同字符的事实。 TRANSLATE将修复不同的角色问题。
DATA FOO;
length previousnode $8;
DO t0avgStakeRank=0,1;
DO eventtime=1 to 5;
if eventtime=1 then do;
previousnode=' ';
output;
end;
else do;
do _t = 0 to 2**(eventtime-1)-1;
previousnode=translate(translate(trimn(putn(_t,'BINARY.',eventtime-1)),'L','1'),'W','0');
output;
end;
end;
END;
END;
run;