Часть имени файла как переменная

У меня есть список файлов с похожими именами, например:

  • 2002_файл
  • 2003_файл
  • 2004_файл

Я собираюсь запустить простой скрипт:

foreach year in 2002 2003 2004 2005 2006 2007 2008 2009 2011 2012 2013 2014 2015 {  
use "$input\`year'_file.dta ", clear
keep v1 v2 v3
tab v1, gen (v1_dummy)
gen year = 'x'
save "$output\`year'_newfile.dta ", replace
}

Однако я хотел бы, чтобы в одном из файлов была создана соответствующая переменная года.

Как добавить переменную year = 'year'?


person Joyce M.    schedule 25.06.2018    source источник


Ответы (1)


Вы нигде не определяете локальный макрос x.

Следующее должно работать:

foreach year in 2002 2003 2004 2005 2006 2007 2008 2009 2011 2012 2013 2014 2015 {
    use "$input\`year'_file.dta ", clear
    keep v1 v2 v3
    tab v1, gen (v1_dummy)
    gen year = `year'
    save "$output\`year'_newfile.dta ", replace
}

Только для определенного года:

foreach year in 2002 2003 2004 2005 2006 2007 2008 2009 2011 2012 2013 2014 2015 {
    use "$input\`year'_file.dta ", clear
    keep v1 v2 v3
    tab v1, gen (v1_dummy)
    if `year' == 2005 gen year = `year'
    save "$output\`year'_newfile.dta ", replace
}
person Community    schedule 25.06.2018
comment
Вы правы, я поправил вопрос! Каждый случай не имеет значения, эту ошибку я сделал сейчас, когда писал вопрос и адаптировал пример. - person Joyce M.; 26.06.2018
comment
@JoyceMaia Вы хотите, чтобы переменная была добавлена ​​в новый файл только для определенного года? - person ; 26.06.2018
comment
Мне нужно сделать эту часть имени файла, которая соответствует году, переменной (gen year = `x'), но я не знаю, как это сделать. - person Joyce M.; 26.06.2018
comment
Ошибка заключалась в отсутствии кавычек ` x ' или ` year '. - person Joyce M.; 26.06.2018
comment
@JoyceMaia Вам не нужны кавычки. Если вы используете кавычки, вы создадите строковую переменную year вместо числовой. - person ; 26.06.2018
comment
Если я не ставлю его строкой, почему-то возникает ошибка при сохранении новых имен файлов. Сохраняет как `x' вместо лет. - person Joyce M.; 29.06.2018
comment
@JoyceMaia Извините, но я не могу воспроизвести вашу проблему. Измененный код, который я предоставил выше, работает, как и ожидалось, на моем компьютере. - person ; 29.06.2018