获取列中元素子集的频率计数
Get frequency counts for a subset of elements in a column
我可能在 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
等,但不知道如何从结果集中剥离某些元素。所以这对我来说是一个主要问题。如果你执行一个查询,你如何 select 只有你想要的元素用于下一次计算?像 n(0) 是计数,n(1) 是平均值等。我能够使用 contract
、bysort
等并创建一个单独的数据集,然后我 merge
d 用一个额外的列返回到主集中使用 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)
请告诉我如何从结果集中挑选出我需要的特定元素(可以来自重复报告,tab
等)
第二部分 - 澄清:也许我应该澄清并将问题分为两部分。例如,如果我在您的代码 运行 之后发出此后续命令:tabdisp Type, c(Freq)
。它可能会打印出漂亮的 table。然后我可以使用那个(派生的)table 以编程方式执行更多计算吗?
例如获取table的第一行。
Table. ----------------------
Type| Freq ----------+-----------
A | -1
B | -1
C | -1
D | -3
S | -3
---------------------- –
我发现这很难理解(请参阅问题评论),但此处演示了一些技巧。 by:
定义的观察子集中的观察数由 _N
给出。剩下的就是排序技巧。否定频率是 select 最高频率和最低 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 |
+---------------------------------+
我可能在 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
等,但不知道如何从结果集中剥离某些元素。所以这对我来说是一个主要问题。如果你执行一个查询,你如何 select 只有你想要的元素用于下一次计算?像 n(0) 是计数,n(1) 是平均值等。我能够使用 contract
、bysort
等并创建一个单独的数据集,然后我 merge
d 用一个额外的列返回到主集中使用 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)
请告诉我如何从结果集中挑选出我需要的特定元素(可以来自重复报告,tab
等)
第二部分 - 澄清:也许我应该澄清并将问题分为两部分。例如,如果我在您的代码 运行 之后发出此后续命令:tabdisp Type, c(Freq)
。它可能会打印出漂亮的 table。然后我可以使用那个(派生的)table 以编程方式执行更多计算吗?
例如获取table的第一行。
Table. ----------------------
Type| Freq ----------+-----------
A | -1
B | -1
C | -1
D | -3
S | -3
---------------------- –
我发现这很难理解(请参阅问题评论),但此处演示了一些技巧。 by:
定义的观察子集中的观察数由 _N
给出。剩下的就是排序技巧。否定频率是 select 最高频率和最低 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 |
+---------------------------------+