我可能在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)是平均值等。我能够使用contract
,bysort
等并创建一个单独的数据集然后我{{1}使用merge
或gen
返回主集合必须有一些简单的东西,这样就不需要创建额外的数据集了。
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)
答案 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 |
+---------------------------------+