获取列

时间:2017-08-16 07:28:33

标签: count stata frequency

我可能在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,并记录每个FailType类型中PartID的最高频率。领带可以任意打破,最好是可以选择较低的领带。

我查看了groups等,但不知道如何从结果集中删除某些元素。这对我来说是一个重大问题。如果执行查询,如何仅选择下一次计算所需的元素?类似于n(0)的是计数,n(1)是平均值等。我能够使用contractbysort等并创建一个单独的数据集然后我{{1}使用mergegen返回主集合必须有一些简单的东西,这样就不需要创建额外的数据集了。

egen

请告诉我如何从结果集中挑选出我需要的特定元素(可以来自重复报告,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) 等。)

第二部分 - 澄清:也许我应该澄清并将问题分成两部分。例如,如果我在运行您的代码后发出此followup命令:tab。它可能打印出一张漂亮的桌子。然后,我可以使用该(派生)表以编程方式执行更多计算吗?

例如,获取表格的第一行。

tabdisp Type, c(Freq)

1 个答案:

答案 0 :(得分:0)

我发现这很难遵循(见问题评论),但这里展示了一些技巧。由by:定义的观察子集中的观察数量由_N给出。其余的是整理技巧。取消频率是一种选择最高频率和最低Type的方法,我认为这是你分裂关系时所追求的。否定后退可以获得正频率。

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 |
     +---------------------------------+