这个问题在R中非常简单,但我似乎无法在Stata中使用它。
我想使用方括号索引,但其中包含一个涉及另一个变量的表达式,即我想要的具有唯一值cumul
的变量:
replace country = country[cumul==20] in 12
cumul == 20
对应于数据集中的行号638,因此上面应该在第12行中将country
变量替换为第638行中相同变量的值。上面的表达式显然不是正确的方法:它只是用缺失值替换第12行中的country
变量。
答案 0 :(得分:1)
Stata的行索引不能以这种方式工作。但是,你可以做的是一个简单的两线解决方案:
levelsof country if cumul==20
replace country = "`r(levels)'" in 12
如果您想确保cumul == 20唯一标识一个国家/地区的值,请添加:
assert `:word count `r(levels)''==1
这两行之间。
答案 1 :(得分:0)
可能值得解释为什么问题中的结构并不能按照您的意愿工作,超出" Stata不是R!"。
给定变量x
:在x[1]
之类的引用中,[1]
被称为下标,尽管没有在该行下面写入任何内容。下标是观察数,该数字始终是数据集中当前保存在内存中的数字。
Stata允许在下标中使用表达式;通过观察对它们进行评估,然后将结果用于查找变量中的值。考虑一下这个沙箱:
clear
input float y
1
2
3
4
5
end
. gen foo = y[mod(_n, 2)]
(2 missing values generated)
. gen x = 3
. gen bar = y[y == x]
(4 missing values generated)
. list
+-------------------+
| y foo x bar |
|-------------------|
1. | 1 1 3 . |
2. | 2 . 3 . |
3. | 3 1 3 1 |
4. | 4 . 3 . |
5. | 5 1 3 . |
+-------------------+
mod(_n, 2)
是将观察_n
除以2的余数:奇数观测数为1,偶数为0。观察0不在数据集中(Stata开始索引为1)。引用该观察中的值并不是错误,但结果将返回为缺失(此处缺少数字,如果变量为字符串,则为空字符串""
)。因此,对于奇数观察数,foo
为x[1]
或1,对于偶数,则为y == x
。
如果为真且0为假,则将真或假表达式计算为1。因此,bar
仅在观察3中为真,因此y[1]
是. gen random = runiform()
. sort random
. gen obs = _n
. sort y
. gen randomsorted = random[obs]
. l
+-----------------------------------------------+
| y foo x bar random obs random~d |
|-----------------------------------------------|
1. | 1 1 3 . .3488717 4 .0285569 |
2. | 2 . 3 . .2668857 3 .1366463 |
3. | 3 1 3 1 .1366463 2 .2668857 |
4. | 4 . 3 . .0285569 1 .3488717 |
5. | 5 1 3 . .8689333 5 .8689333 |
+-----------------------------------------------+
的值,并且在其他地方丢失。 Stata在R中没有特殊(和有用)的扭曲,因为它是用于选择零个或多个值的真或假表达式为真的下标。
有一些方法可以使用下标来获得特效。这个例子显示了一个。 (在Mata中获得同样的结果要容易得多。)
//***********************************************//
//* Online Examination System *//
//*---------------------------------------------*//
function countDown() {
sec--;
if (sec == -01) {
sec = 59;
min = min - 1;
if(min==-01)
{
min=59;
hour=hour-1;
}else
{
hour=hour;
}
} else {
min = min;
}
if (sec<=9) { sec = "0" + sec; }
time = (hour<=9 ? "0" + hour : hour) + " : " + (min<=9 ? "0" + min : min) + " : " + sec + "";
if (document.getElementById) { document.getElementById('timer').innerHTML = time; }
SD=window.setTimeout("countDown();", 1000);
if (hour=='00'&& min == '00' && sec == '00') { sec = "00";min="00"; window.clearTimeout(SD); window.location=document.forms[0].action+"?fs=yes";}
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
addLoadEvent(function() {
countDown();
});
这个答案并不涵盖Stata或Mata中的矩阵。