我正在浏览许多Stata文档,但仍然很难找到一些基本任务的简单示例。
一个特别难以理解的项目是如何将某些操作的结果存储在变量中(从编程的角度,而不是字段/列),以便我可以将它们相互比较。我并不是在谈论统计模型,我可能会使用诸如estimates
之类的东西。
这是R世界的一个示例,其中我将两个字段的组的平均值存储在相同数量的变量中(同样,在编程意义上):
library(dplyr)
category <- c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c')
first <- c(2, 1, 5, 3, 4, 2, 1, 3, 3)
second <- c(3, 1, 6, 9, 12, 32, 113, 85, 123)
df <- data.frame(category, first, second)
firstMean <- df %>% group_by(category) %>% summarise(mean =
mean(first))
secondMean <- df %>% group_by(category) %>% summarise(mean =
mean(second))
abs(firstMean[,2] - secondMean[,2])
# Results
# a 0.67
# b 14.67
# c 104.67
问题:
我也正在阅读return list
,但是当我计算平均值后使用save命令时,似乎覆盖了先前运行的命令。
我不想将这些内容保存在文件中,我只是想制作快速的临时数据帧。
答案 0 :(得分:1)
我不是Stata专家(我主要在python中工作,在R中涉猎),但是这段代码应该可以工作。 stata中的collapse
与R中的group_by
相似。折叠数据后,我生成了差分变量,然后仅将该变量保留在我的数据框中。最后,我将文件另存为temp(并替换CD中其他名为temp.dta的文件)。
use df.dta, clear
collapse (mean) first second, by(category)
gen diff = abs(first-second)
keep diff
save temp, replace
答案 1 :(得分:1)
您可以将结果放入仅一行的变量中(Stata意义)。不重复显示它也很容易。 @Joe Patten的答案很有帮助,但是会破坏当前数据集。
clear
input str1 category first second
a 2 3
a 1 1
a 5 6
b 3 9
b 4 12
b 2 32
c 1 113
c 3 85
c 3 123
end
egen difference = mean(first-second), by(category)
egen tag = tag(category)
list category difference if tag , noobs
tabdisp category, c(difference) format(%4.2f)
以下是结果:
. list category difference if tag , noobs
+----------------------+
| category differe~e |
|----------------------|
| a -.6666667 |
| b -14.66667 |
| c -104.6667 |
+----------------------+
. tabdisp category, c(difference) format(%4.2f)
----------------------
category | difference
----------+-----------
a | -0.67
b | -14.67
c | -104.67
----------------------
您要达到的目标可能会大不相同,例如使用局部宏或标量或使用Mata。就像在R中一样,在Stata中有多种实现方法。
对于文档,从[U]开始,没有真正的替代品可以阅读手册。您可能会浪费大量时间在Google上搜索,因为互联网上有很多非常有限或零碎的教程。大多数情况下,它们支持作者的意图,但是只有通过系统的阅读,才能获得更全面的理解。
答案 2 :(得分:1)
下面是@NickCox解决方案的补充答案,这是最干净的:
display: flex;
flex-wrap: wrap;
这是<link href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.6.2/css/bulma.min.css" rel="stylesheet" />
<div class='columns is-multiline'>
<div class='column is-4'>
<div class="card">
<div class="card-image">
<div class="card-image">
colonne
</div>
</div>
<div class="card-content">
</div>
</div>
</div>
<div class='column is-4'>
<div class="card">
<div class="card-image">
colonne 2
</div>
<div class="card-content">
</div>
</div>
</div>
</div>
与其关联的clear
input str1 category first second
a 2 3
a 1 1
a 5 6
b 3 9
b 4 12
b 2 32
c 1 113
c 3 85
c 3 123
end
bysort category: generate difference = round(abs(sum(first / _N) - sum(second / _N)), .01)
功能的共同作用。 “手动”执行此操作的好处是,您可以结合使用egen
和mean()
函数来取整并分别取差的绝对值。
然后您可以显示结果:
round()
或者您可以将它们保存在变量中:
abs()