Передача нескольких списков неопределенной длины в программу - PullRequest
0 голосов
/ 19 ноября 2018

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

У меня работает следующее:

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'
...