string - 在 Stata 中使用循环将字符串变量成对加入两个

标签 string for-loop stata

我有许多字符串变量 v1 v2 ... v10 每个包含一个字母。我想要做的是加入 v1v2v3v4 等等直到 v9v10。对于单个案例,代码很简单 v12 = v1 + v2。问题是当我想对数据集中的所有对执行此操作时。我尝试了以下代码,但得到了错误的结果。

forval i=1(2)9 {
    gen var`i' = v`i' + v`i+1'
}

这是我想要的示例:

v1  v2 v12 
G   G  GG
A   G  AG
G   G  GG
A   A  AG

以及我得到的:

    v1  v2 v12 
    G   G  GG
    A   G  AA
    G   G  GG
    A   A  AA

出于某种原因,它使用相同的变量 (v1) 两次。

最佳答案

你不能用那种方式用本地宏做算术运算,即使是那些包含数字的宏。奇怪的是,Stata 只是忽略宏引用中的额外 +1,如本例所示:

. local i = 1

. di "`i+1'"
1

严格来说,i+1 不是合法的宏名称,给定 + 字符。无论如何,忽略 Stata 所做的额外文本。

有多种方法可以获得您想要的东西。这是一个:

forval i = 1(2)9 {
    local j = `i' + 1 
    gen var`i' = v`i' + v`j'
}

还有一个:

forval i = 1(2)9 {
    gen var`i' = v`i' + v`=`i'+1'
}

额外的符号

`=  ' 

表示计算给定的表达式,然后插入结果。它在精神上与你正在尝试的很接近。

关于string - 在 Stata 中使用循环将字符串变量成对加入两个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31182800/

相关文章:

java - 关于遍历数组时for循环中的 "else"语句

python - 具有大型 .dta 文件的 Pandas read_stata()

json - 在 Swift 中将字符串转换为 JSON 字符串

c# - 如何构建像 SO 这样的标记系统?

java - 如何匹配字符串中的1个字符

python - C 中的 For 循环没有明显原因提前中断 - 可能与函数指针(回调)有关

python - 如何避免在Python中嵌套“for循环”?

Java 将字符串转换为 BigDecimal

stata - 删除所有缺失值的变量

stata - r(109) 错误消息 代码 迭代字符串中的数字