查找两个变量名称标量的联合

查找两个变量名称标量的联合

问题描述:

我有一个程序输出一个由空格分隔的变量名称的本地标量。我需要在两个样本(相同的.dta)上运行程序两次,并将联合(交叉变量名称出现在两个标量中)作为新的空格分隔的本地标量(用于输入到另一个程序)。查找两个变量名称标量的联合

我不知道如何拆分(每个空格)和或测试每个变量名称的出现次数。

+0

本地和标量是不同的。标量可以有一个临时名称,这不是一回事。另外,显示你的代码并解释它是个好主意。 –

塔塔有一堆的扩展宏功能列表上的使用,您可以用help macrolists,在这里你可以看到一个& B返回和B,如果A =“ABCD”和B的交集发现=“bcfg”,则A & B =“bc”。

这允许你做这样的事情:

clear 
scalar l1="vara varb varc" 
scalar l2="varc vard vare" 
local l1 = scalar(l1) 
local l2 = scalar(l2) 
local inter: list l1 & l2 
scalar inter="`inter'" 
scalar list inter 

您的标量转换为当地人,让他们的工会,并转换到这一个标量。将代码修改为使用本地代码而不是标量可能更容易,因此您不必处理转换。

+0

恒星,感谢您指出这一点! – km5041

我不确定我是否完全理解您的问题,如果这不是合适的答案,请添加一个示例供我们使用。

这里是检查两个空格分隔的宏并获得它们的交集的代码,即使它不是最优雅的,除非你的宏是巨大的,它应该仍然是相当快的。

local list1 first list here 
local list2 list two here 
local intersection 

foreach l1 in `list1' { 
    foreach l2 in `list2' { 
     // if they overlap, add to the intersection macro 
     if "`l1'" == "`l2'" { 
      local intersection `intersection' `l1' 
     } 
    } 
} 

mac list // show the macros stored currently in the do file