Passing multiple lists of unspecified length to a program
I would like to create a Stata program that takes multiple lists of unspecified length as arguments. However, I don't know how the program can distinguish between the lists once they're passed in.
For example, I'd like to be able to do something like:
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'
The two solutions I've been thinking about are:
- Creating additional macros specifying the length of each list and passing those in as well
- using a delimiter between lists
Neither is very difficult, but I would think there's a simpler way to do this.
I'm using Stata 13 for Windows.
list arguments stata stata-macros
add a comment |
I would like to create a Stata program that takes multiple lists of unspecified length as arguments. However, I don't know how the program can distinguish between the lists once they're passed in.
For example, I'd like to be able to do something like:
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'
The two solutions I've been thinking about are:
- Creating additional macros specifying the length of each list and passing those in as well
- using a delimiter between lists
Neither is very difficult, but I would think there's a simpler way to do this.
I'm using Stata 13 for Windows.
list arguments stata stata-macros
add a comment |
I would like to create a Stata program that takes multiple lists of unspecified length as arguments. However, I don't know how the program can distinguish between the lists once they're passed in.
For example, I'd like to be able to do something like:
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'
The two solutions I've been thinking about are:
- Creating additional macros specifying the length of each list and passing those in as well
- using a delimiter between lists
Neither is very difficult, but I would think there's a simpler way to do this.
I'm using Stata 13 for Windows.
list arguments stata stata-macros
I would like to create a Stata program that takes multiple lists of unspecified length as arguments. However, I don't know how the program can distinguish between the lists once they're passed in.
For example, I'd like to be able to do something like:
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'
The two solutions I've been thinking about are:
- Creating additional macros specifying the length of each list and passing those in as well
- using a delimiter between lists
Neither is very difficult, but I would think there's a simpler way to do this.
I'm using Stata 13 for Windows.
list arguments stata stata-macros
list arguments stata stata-macros
edited Nov 19 '18 at 18:40
Pearly Spencer
10.2k173461
10.2k173461
asked Nov 19 '18 at 18:22
Dillon BowenDillon Bowen
82
82
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
The following works for me:
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')
or:
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'
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53380554%2fpassing-multiple-lists-of-unspecified-length-to-a-program%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The following works for me:
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')
or:
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'
add a comment |
The following works for me:
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')
or:
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'
add a comment |
The following works for me:
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')
or:
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'
The following works for me:
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')
or:
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'
edited Nov 19 '18 at 18:50
answered Nov 19 '18 at 18:33
Pearly SpencerPearly Spencer
10.2k173461
10.2k173461
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53380554%2fpassing-multiple-lists-of-unspecified-length-to-a-program%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown