2014-01-17 34 views
0

我計算了40個股票的比例。我需要根據比率的值將這些分爲高,中,低三組。比例是一個的分數,並且沒有太多重複。我需要的是創建三組,每組約13只股票,第1組有較高的比率,第2組中等比率和第3組比較低。我有下面的代碼,但它只給我所有的股票排名1。 我該如何解決這個問題?在SAS中,我如何將我的比率分成高中低?

data sourceh.combinedfreq2; 
merge sourceh.nonnfreq2 sourceh.nofreq2 sourcet.caps; 
by symbol; 
ratio=(freqnn/freq); 
run; 

proc rank data=sourceh.combinedFreq2 out=sourceh.ranked groups=3; 
by symbol notsorted; 
var ratio; 
ranks rank; 
run; 
+0

你是如何定義三組的 - 你認爲什麼是高/中/低,或者如果這是問題的一部分,你如何定義這些組? – Joe

+0

Yep-從proc級別刪除'by'行,它應該工作。根據等級,「等級」現在應該有0/1/2。把它重命名爲你想要的任何東西('等級')。 – Joe

回答

1

如果你想自動分割成三個相對甚至組,您可以使用PROC RANK(見例如使用sashelp.stocks):

data have; 
set sashelp.stocks; 
ratio=high/low; 
run; 

proc rank data=have out=want groups=3; 
by stock notsorted; 
var ratio; 
ranks rank; 
run; 

即分割它們分爲3組。只要你有40個不同的值(即一個值不重複很多),它將會產生3個均勻分裂的組(每個約13個)。

在你的情況下,不使用任何by - by將創建行列的單獨設置(在這裏我通過股票排名的日期,但是要排名的股票。)

+0

不知何故,這沒有奏效。它將我所有的比例都改爲1.比例是1的分數,並且沒有太多重複。我需要的是創建三組,每組約13只股票,第1組有較高的比率,第2組中等比率和第3組比較低。謝謝。 –

+0

啊,那是對的,你不需要''庫存''編輯。 – Joe

+0

另外 - 請將該信息編輯爲原始問題。 – Joe

0

我認爲人們正在這更比它需要的複雜。讓我們在簡單的模式下做到這一點。

首先,我們將創建數據集並創建比率。其次,我們將按比例對數據進行排序。 最後,我們將根據觀察編號分配一個組。

警告!未經測試的代碼!

/*Make the dataset. I stole this from your code above*/ 
data sourceh.combinedfreq2; 
merge sourceh.nonnfreq2 sourceh.nofreq2 sourcet.caps; 
by symbol; 
ratio=(freqnn/freq); 
run; 

/*sort the data so that its ordered by ratio*/ 
PROC SORT DATA=sourceh.combinedfreq2 OUT=sourceh.combinedfreq2 ; 
BY DESCENDING ratio ; 
RUN ; 

/*Assign a value based on observation number*/ 
Data sourceh.combinedfreq2; 
Set sourceh.combinedfreq2; 

length Group $6.; 

if _N_ <=13 Then Group = "High"; 
if _N_ > 13 and _N_ <= 26 Then Group = "Medium"; 
if _N_ > 26 Then Group = "Low"; 

run; 
相關問題