从 Stata 中的变量创建具有独特观察值的向量
Creating a vector with unique observations from a variable in Stata
我主要想做的是创建一个变量,我可以在我的样本层(例如,由 '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
看起来不错,因为它在输出中显示了列中变量的独特观察结果,但我找不到按照输出显示的方式提取这些观察结果的方法。
我想我理解你的问题,但也许我不理解。部分代码:
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)
如果您缺少 and/or 个关系,则需要做更多的工作。
我主要想做的是创建一个变量,我可以在我的样本层(例如,由 '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
看起来不错,因为它在输出中显示了列中变量的独特观察结果,但我找不到按照输出显示的方式提取这些观察结果的方法。
我想我理解你的问题,但也许我不理解。部分代码:
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)
如果您缺少 and/or 个关系,则需要做更多的工作。