2017-08-16 22 views
0

我可能會丟失在Stata一些優雅的方式來獲得這個例子,這與電氣部件做,每月觀察故障等獲取頻率計數元素的子集在列

clear 
input str3 (PartID Type FailType) 
ABD A 4 
BBB S 0 
ABD A 3 
ABD A 4 
ABC A 2 
BBB A 0 
ABD B 1 
ABC B 7 
BBB C 1 
BBB D 0 

end 

我想分組(bysort)每個PartID並且記錄每個PartID類型內的FailType的最高頻率。領帶可以任意折斷,最好可以挑選下面的領帶。

我看着groups等,但不知道如何剝離結果集中的某些元素。所以這對我來說是一個主要問題。如果你執行一個查詢,你如何只選擇你想要的下一個計算的元素?例如n(0)是計數,n(1)是平均值等。我能夠使用contract,bysort等,並創建一個單獨的數據集,然後merge d用一個額外的列返回到主集中。必須使用genegen這樣簡單,這樣就不需要創建額外的數據集。

The expected results here will be: 
PartID Freq 
ABD 4 #(4 occurs twice) 
ABC 2 #(tie broken with minimum) 
BBB 0 #(0 occurs 3 times) 

請讓我知道我可以摘掉,我從一個結果集需要(可從重複的報告,tab等)

第二部分具體內容 - 澄清:也許我應該澄清並將問題分爲兩部分。例如,如果我在運行代碼後發出後續命令:tabdisp Type, c(Freq)。它可以打印出一張漂亮的桌子。然後,我可以使用該(派生)表以編程方式執行更多計算?

例如獲取表格的第一行。

Table. ---------------------- 
Type| Freq ----------+----------- 
A | -1 
B | -1 
C | -1 
D | -3 
S | -3 
---------------------- – 
+0

我修剪了這個問題,專注於精確的代碼而不是推論或個人評論,並刪除對R的引用:你沒有顯示R代碼,也沒有要求精確的R問題。這仍然很難遵循(例如,有什麼意思與你的問題有關)。請注意,變量是您在此調用列的Stata術語。 –

+0

在你的第二部分中,我對你的例子沒什麼意義,因爲(1)'Freq'是用'PartID FailType'來定義的,所以爲什麼要用'Type'來表達它? (2)'Freq'在我的代碼末尾並不是負數,所以你正在做一些不同的事情,但沒有向我們展示你的代碼。作爲一個普遍的問題,「tabdisp」是顯示已經計算結果的序列的結尾;它對於以後的計算沒有額外的價值。 –

回答

0

我發現這很難遵循(請參閱問題的評論),但是這裏展示了一些技巧。由by:定義的觀察子集中的觀測值的數量由_N給出。剩下的就是分揀技巧。否定頻率是一種選擇最高頻率和最低分辨率的方法,我認爲這是你分割領帶後的結果。否定返回讓你獲得正頻率。

clear 
input str3 (PartID Type FailType) 
    ABD A 4 
    BBB S 0 
    ABD A 3 
    ABD A 4 
    ABC A 2 
    BBB A 0 
    ABD B 1 
    ABC B 7 
    BBB C 1 
    BBB D 0 
end 

bysort PartID FailType: gen Freq = -_N 
bysort PartID (Freq Type) : gen ToShow = _n == 1 
replace Freq = -Freq 
list PartID Type FailType Freq if ToShow 

    +---------------------------------+ 
    | PartID Type FailType Freq | 
    |---------------------------------| 
    1. | ABC  A   2  1 | 
    3. | ABD  A   4  2 | 
    7. | BBB  A   0  3 | 
    +---------------------------------+ 
+0

我已經重新格式化了我最初的問題,使其更具體。示例本身不需要_Mean_。我在問如何以編程方式將一個統計數據(如平均數或頻率)分配給一個變量,然後我可以在其他地方使用, –

+0

請參閱對修訂後的問題的評論。我的回答已經體現了將結果納入新變量的例子。還有很多其他方法,不能簡單解釋。 –