2017-08-16 55 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

请参阅对修订后的问题的评论。我的回答已经体现了将结果纳入新变量的例子。还有很多其他方法,不能简单解释。 –