2013-08-22 2 views
0

SAS에서 두 개의 크로스 탭이 출력됩니다. 하나는 Time0 용이고 다른 하나는 Time1 용입니다. 첫 번째 크로스 탭에있는 각 셀의 값 변화를 두 번째 크로스 탭과 비교할 때 흥미 롭습니다.SAS PROC TABULATE : 셀 값에 따른 색상

다른 크로스 탭에서 동일한 셀과의 비교를 기반으로 셀의 배경색을 변경하는 좋은 방법이 있습니까? 그렇지 않은 경우 Time0과 Time1 사이에 변수가 변경된 변수를 만들면 값이 양수인지 음수인지에 따라 크로스 탭의 셀 색을 어떻게 변경할 수 있습니까? 셀에 백분율 변화가있는 경우 색 그라디언트를 5 % 씩 증가시킬 수 있습니까? 다음

는 I 일부 샘플 데이터를 가지고

data have; 
    input username $ betdate : datetime. stake; 
    dateOnly = datepart(betdate) ; 
    format betdate DATETIME.; 
    format dateOnly ddmmyy8.; 
    datalines; 
    player1 12NOV2008:12:04:01 90 
    player1 04NOV2008:09:03:44 30 
    player2 07NOV2008:14:03:33 120 
    player1 05NOV2008:09:00:00 50 
    player1 05NOV2008:09:05:00 30 
    player1 05NOV2008:09:00:05 20 
    player2 09NOV2008:10:05:10 10 
    player2 15NOV2008:15:05:33 35 
    player1 15NOV2008:15:05:33 35 
    player1 15NOV2008:15:05:33 35 
    run; 

proc sort data=have; by username betdate; run; 

data have; 
    set have; 
    by username dateOnly betdate; 
    retain eventTime; 
    if first.username then eventTime = 0; 
    if first.betdate then eventTime + 1; 
run; 

proc sql; 
    create table playerStats as 
    select 
    distinct username, 
    (select distinct avg(stake) from have where username = main.username and eventTime <= 1) format comma10.2 as bet1AvgStake, 
    (select distinct avg(stake) from have where username = main.username and eventTime <= 2) format comma10.2 as bet2AvgStake, 
    (select distinct avg(stake) from have where username = main.username and eventTime <= 3) format comma10.2 as bet3AvgStake 
    from have main; 
quit; 

Proc rank data=playerStats ties=mean out=customerStats groups=2; 
    var  bet1AvgStake bet2AvgStake; 
    ranks bet1AvgStakeRank bet2AvgStakeRank; 
run; 

PROC TABULATE DATA=customerStats NOSEPS; 
    VAR bet1AvgStake bet2AvgStake; 
    class bet1AvgStakeRank; 
    TABLE bet1AvgStakeRank, bet1AvgStake*(N Mean); 
    TABLE bet1AvgStakeRank, bet2AvgStake*(N Mean); 
RUN; 

I 번째 교차 각 셀의 값은 제 1 및 녹색 셀의 등가 셀보다 낮은 경우 적혈구를보고 싶다 값이 더 높을 때.

감사합니다.

+0

PROC REPORT를 사용하면 어떨까요? 이 작업 블록을 쉽게 추가 할 수 있습니다. – orh

+0

신경 쓰지 마라, 나는 그것을 아주 분명히 읽지 않았다. 내가 생각하기에, 당신은 출력 데이터 셋을 생성하기 위해 proc tabulate를 사용해야하고, 거기에서 비교를하고 (하이라이트하고 싶은 것에 대한 어떤 종류의 플래그 변수를 만든다.) proc 보고서로 출력하고 음영 처리를해야한다. – orh

답변

0

나는 모든 것을 하나의 proc에서 할 수 있다고 생각하지 않지만, 제대로 이해한다면 분명히 제 2 부를 할 수 있습니다. 더 자세한 정보를 검색하는 것을 돕기 위해 일반적으로 "트래픽 조명"이라고 불립니다. 예를 들어, this paper에는이를 수행하는 방법에 대한 몇 가지 예가 있습니다. 그것은 필요 않습니다

proc tabulate data=yourdata; 
var bets; 
tables bets/style=[background=betfmt.]; 
run; 

:

proc format; 
value betfmt 
    low - -5= 'red' 
    -5 >-> 0 = 'lightred' 
    0 - 5 ='lightgreen' 
    5 >- high = 'green'; *or hex values like 'cxFF0099'; 
quit; 

는 그 다음 PROC의 표로에이 형식을 사용

일반적 개념은 당신이 형식을 만들 수 있다는 것입니다, 레이블이있는 색상입니다 현재 셀을 기반으로합니다. PROC REPORT를 사용하지 않고 다른 셀을 기반으로 계산할 수 없습니다.