Передача нескольких списков неопределенной длины в программу
Я хотел бы создать программу 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'
Два решения, о которых я думал:
- Создание дополнительных макросов с указанием длины каждого списка и их передачей
- используя разделитель между списками
Ни то, ни другое не очень сложно, но я думаю, что есть более простой способ сделать это.
Я использую 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'