我将下面的宏定义为变量的级别id
,var1
并且var2
:
levelsof id, local(id_lev) sep(,)
levelsof var1, local(var1_lev) sep(,)
levelsof var2, local(var2_lev) sep(,)
我希望能够在foreach
和forval
循环期间通过它们的索引来引用存储在这些宏中的级别值。我正在学习如何使用宏,所以我不确定这是否可行。
当我尝试访问上述任何宏的单个元素时,会显示宏的每个元素。例如,如果我display
是 的第一个元素id_lev
,则每个元素都显示为单个元素(并且最后一个元素被列为我不理解的无效名称):
. di `id_lev'[1]
0524062407240824092601260226032604 invalid name
r(198);
此外,如果我尝试在循环中引用任何宏的元素(下面给出了我尝试过的示例),我会收到错误,即级别列表的第三个值是无效数字。
foreach i of numlist 1/10 {
whatever `var1'[i] `var2'[i], gen(newvar)
}
forval i = 1/10 {
local var1_ `: word `i' of `var1''
local var2_ `: word `i' of `var2''
whatever `var1_' `var2_', gen(newvar)
}
不能通过索引来引用宏的元素吗?
还是我错误地引用了索引值?
更新1:
我已经完成了所有工作(谢谢),除了调整forval
William 对我上面的循环的回答中给出的循环,我试图在相同的索引值处访问两个变量的宏。
具体来说,我想同时调用第一个、第二个、...、最后一个元素,var1
以便var2
我可以使用循环中的元素来生成一个新变量。我怎样才能调整forval
威廉建议的循环来完成这个?
更新 2:
我能够修改下面 William 给出的代码来创建功能循环:
levelsof id, clean local(id_lev)
macro list _id_lev
local nid_lev : word count `id_lev'
levelsof var1, local(var1_lev)
macro list _var1_lev
local nvar1_lev : word count `var1_lev'
levelsof var2, local(var2_lev)
macro list _var2_lev
local nvar2_lev : word count `var2_lev'
forval i = 1/`nid_lev' {
local id : word `i' of `id_lev'
macro list _id
local v1 : word `i' of `var1_lev'
macro list _v1
local v2 : word `i' of `var2_lev'
macro list _v2
whatever `v1' `v2', gen(newvar)
}