Передача нескольких списков неопределенной длины в программу

Я хотел бы создать программу 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 ответ

Решение

Следующие работы для меня:

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'
Другие вопросы по тегам