为什么使用 foreach 循环会出现无效语法错误?

Why do I get an invalid syntax error with a foreach loop?

我想要 renameintensity 开头的变量名称。我收到一个无效的语法,r(198) 错误,代码如下。

#delimit;

foreach VAR of varlist intensity* {;

 local NEW = subinstr("`VAR'", "intensity", "int");
 rename `VAR' `NEW';

 };

你这里用的分隔符;不咬人,我就无视了。

错误出现在 subinstr() 的使用中,它必须有四个参数,第四个是要进行的替换次数。参见 help subinstr()

这有效(请注意,请使用最小的完整可验证示例):

clear 
set obs 1 
generate intensity1 = 1 
generate intensity2 = 2 

foreach VAR of varlist intensity* {
    local NEW = subinstr("`VAR'", "intensity", "int", 1)
    rename `VAR' `NEW'
}

ds

但是循环是完全没有必要的。首先,让我们把名字翻转过来,然后展示如何直接更改名字:

rename int* intensity*
rename intensity* int*

有关更多信息,请参阅 help rename groups