【问题标题】:Creating a vector with unique observations from a variable in Stata从Stata中的变量创建具有唯一观察值的向量
【发布时间】:2015-04-22 20:37:05
【问题描述】:

我主要想做的是创建一个变量,我可以在我的样本层(例如,由“id”变量定义)中分配一个与最高频率相关联的名称(在另一个(字符串)变量中的同名。如果tabulate* 可以按照我需要的方式工作,我的代码将像这样运行:

gen new_class_within_id=""

forvarlues i=1/80 {
      tab class_var, matcell(x) if id==`i'
      svmat x
      sum x2
      local name =x1 if x2==r(max)
      replace new_class_within_id=`name' if id==`i'
}

如果tabulate 允许将唯一的观察名称存储在矩阵中,那将是一般的想法——当然,代码也可能有一些意外错误。但是,虽然使用上面的代码似乎不可能,但我认为我可以使用mkmat,如果我能够在循环中存储带有一些额外编码的向量内的唯一观察值。那可能吗?另外,有没有更简单的方法来执行我想做的事情?

*首先,我认为使用tabulate 并将结果提取到矩阵中可以完成我需要的工作,但是tabulate 不允许我提取观测值的名称,只能提取频率。 tabulate 看起来不错,因为它在输出中显示了列中变量的独特观察结果,但我找不到一种方法来按照输出显示的方式提取这些观察结果。

【问题讨论】:

  • 根据通用字典定义的“独特”观察只出现一次。我建议在这里使用“distinct”这个词更好。此外,Stata 中的观察结果没有名称。它们在特定变量中具有值,并且它们具有取决于当前排序顺序的观察数,但不是名称。
  • 只是为了表明这允许在统计术语中进行简明总结:您想要确定模式。在这里,我们很高兴地允许模式也表示字符串变量的模式。

标签: loops matrix stata frequency


【解决方案1】:

我想我明白你的问题,但也许我不明白。一些代码:

clear
set more off

input ///
id str1 anothvar
1 a
1 a
1 a
1 b
1 m
2 c
2 c
2 m
2 a
2 z
end

list, sepby(id)

*-----

bysort id anothvar : gen count = _N
bysort id (count): gen newvar = anothvar[_N]

list, sepby(id)

如果您有遗漏和/或关系,则需要做更多的工作。

【讨论】:

  • 这似乎正是我所需要的!谢谢!
  • 此外,最常见的值还有一个标准的统计名称。如您所知,这就是模式。 egen 函数 mode() 将模式放入一个新变量中,并且也适用于字符串变量。所以egen newvar = mode(anothvar), by(id) 让你一举两得。
  • 请注意,mode() 也有其他机制来处理缺失和关系。它默认忽略缺失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多