Почему я получаю неверную синтаксическую ошибку с циклом foreach? - PullRequest
0 голосов
/ 03 июля 2019

Я хочу rename имена переменных, начинающиеся с intensity.Я получил неверный синтаксис, ошибка r(198) со следующим кодом.

#delimit;

foreach VAR of varlist intensity* {;

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

 };

1 Ответ

2 голосов
/ 03 июля 2019

Ваше использование разделителя ; здесь не кусается, поэтому я его проигнорирую.

Ошибка в использовании 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.

...