2015-01-02 2 views
0

В приведенном ниже примере мне нужно указать svmat2 a namelist (в этом случае список имен столбцов). У шаблона namelist есть шаблон - как его создать в цикле, а затем передать его команде?Как сгенерировать повторяющийся элемент с петлей?

svmat2 villagemean, names(var1_2011 var1_2012 var1_2013 /// 
          var2_2011 var2_2012 var2_2013 /// 
          var3_2011 var3_2012 var3_2013) /// 
          rnames(villageid) 

ответ

1

Это стандартное приложение forvalues. См. Справку. Есть два вложенных цикла, над инфисом 1 2 3 и в течение лет 2011 2012 2013. В целях безопасности сначала закройте все предыдущие материалы. Убедитесь, что вы ссылаетесь на это только в том месте, где оно создано.

local mylist 
    forval j = 1/3 { 
     forval y = 2011/2013 { 
      local mylist `mylist' var`j'_`y' 
     } 
    } 
    di "`mylist'" 
+0

Очень просветительская! Исходя из других языков, я продолжаю поиски путей для добавления макроса. Тогда как я могу дать 'mylist'' svmat2'? Я попробовал 'names (\' mylist ') 'и' names ("\' mylist' ")' без успеха. – Heisenberg

+1

Первое решение должно работать, поэтому я предполагаю, что вы не следовали совету ** Убедитесь, что вы ссылаетесь на это только в том месте, где оно создано. ** Это означает, что тот же интерактивный сеанс или программа или файл do или файл (или кусок) содержимого файла do-file editor и ** или ** s all bite; вы не можете перекрестно ссылаться. Если это не осветит проблему, ваш опыт других языков подчеркнет, что нам нужно увидеть воспроизводимую ошибку. –

+0

Я очень ценю вашу помощь. Ваш ответ решил эту проблему, а также научил меня нескольким вещам о STATA. – Heisenberg