将多个未指定长度的列表传递给程序

时间:2018-11-19 18:22:32

标签: list arguments stata stata-macros

我想创建一个Stata程序,该程序将多个未指定长度的列表作为参数。但是,我不知道程序一旦传递进来,如何区分列表。

例如,我希望能够执行以下操作:

prog myprog
args list1 list2
{something with list1}
{something with list2}
end

loc list1 a b c
loc list2 x y z
myprog `list1' `list2'

loc list1 a b c d
myprog `list1' `list2'

我一直在考虑的两个解决方案是:

  1. 创建其他宏,以指定每个列表的长度,并将其也传递给
  2. 在列表之间使用分隔符

两者都不是很难,但是我认为有一种更简单的方法来实现。

我正在将Stata 13用于Windows。

1 个答案:

答案 0 :(得分:2)

以下对我有用:

program define myprog
syntax, list1(string) list2(string)

display "`list1'"
display "`list2'"
end

local lista "a b c d"
local listb "e f g h"

myprog, list1(`lista') list2(`listb')

或:

capture program drop myprog
program define myprog

tokenize `0', parse(";")

local list1 `1' // optional
local list2 `3' // optional

display "`list1'" // or "`1'"
display "`list2'" // or "`3'"
end

local lista a b c d
local listb e f g h

myprog `lista';`listb'