2012-03-05 88 views
0

我需要使用SAS陣列來創建每個月的最大值,以確定哪個程序運行時間最長。SAS陣列 - 每月創建最大值

的數據是:

Month Value Program 
    Jan  8  A 
    Jan  6  B 
    Feb  2  C 
    Feb  1  A 
    Mar  9  C 
    Mar  6  B 

等。

誰能告訴我如何使用語法

回答

1

我不會用數組...我對數據進行排序,然後使用第一。符號。

Proc sort data=data; 
by month descending value; 
run; 

Data longest; 
set data; 
by month descending value; 
if first.month then output; 
run; 

這會給你一個最高值的月份記錄。

更新:

陣列的強度處理在一個觀察的變量。您可以保留數組,但是如果數據太大而無法排序,則使用Hash對象更適合於檢查各個觀察值中的變量,然後使用數據步驟進行處理。

+0

感謝這一點,它有助於我今天上午編寫答案的方式。我的經理讓我考慮如何使用陣列來完成我的訓練。 – user1250416 2012-03-05 21:10:05

0

正如Carolina提到的,數組用於在同一個觀察值中讀取變量。他們不適合在這裏完成你的任務。 一個簡單的PROC摘要可能是實現這一點的最簡單方法。我假設你運行所用時間的實際數據記錄爲幾分之一秒,因此實際上不可能有兩個程序在一個月內完全同時運行。如果沒有,那麼你將需要考慮在平行事件中應該怎麼做(proc sql會是更好的方法)。

這裏是代碼,如果您只想看到具有最高值的程序,而不是值本身,那麼使用'程序'刪除括號中的'值'。

data have; 
    input month $ value program $; 
    cards; 
     Jan  8  A 
     Jan  6  B 
     Feb  2  C 
     Feb  1  A 
     Mar  9  C 
     Mar  6  B 
    ; 
    run; 

    proc summary data=have nway; 
    class month; 
    output out=want (drop=_:) maxid(value(program value))=; 
    run;