2013-10-15 29 views
0

如何使用比此PROC SQL查询更简洁的数据步骤创建下表?为PROC TABULATE创建类数据表

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或卡片。

回答

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;