LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (January 1999, week 2)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:   Thu, 14 Jan 1999 14:50:27 -0500
Reply-To:   "Self, Karsten" <Karsten.Self@SCHWAB.COM>
Sender:   "SAS(r) Discussion" <SAS-L@UGA.CC.UGA.EDU>
From:   "Self, Karsten" <Karsten.Self@SCHWAB.COM>
Subject:   Re: Scoping variables one level up
Comments:   To: David D Kane <ddk@NUMERIC.COM>
Content-Type:   text/plain

I solved this in one instance by creating a data step view within the called macro, which was then executed in the calling macro. The macrovariables created as a result (via CALL SYMPUT) are then scoped to the calling macro.

E.g.:

%macro calling; /* stuff */ %called; data _null_; set mvargen; run; run;

%macro called; data mvargen /view= mvargen; call symput('foo', put(_n_, best.)); run; %mend;

%calling;

-- Karsten M. Self (Karsten.Self@schwab.com) Trilogy Consulting

What part of "gestalt" don't you understand?

WARNING: All e-mail sent to or from this address will be received by the Charles Schwab corporate e-mail system and is subject to archival and review by someone other than the recipient.

This communication does not necessarily reflect the views or position of The Charles Schwab Corporation, or any of its subsidiaries or their affiliates.

> ---------- > From: David D Kane[SMTP:ddk@NUMERIC.COM] > Reply To: David D Kane > Sent: Thursday, January 14, 1999 7:28 AM > To: SAS-L@UGA.CC.UGA.EDU > Subject: Scoping variables one level up > > <<File: vcard.vcf>> > Surely, someone has already solved this problem. > > How does one force a macro variable to have a scope that is one level > above the macro in which it is created but *not* global? > > Consider a utility (attached at the end of this message) that creates an > inderminate number of macro variables (var1, var2, etc) on the basis of > the observations in a data set. I use this utility (ScanList) all the > time (if someone has a better version, please post it). In order for the > calling macro to uses var1, var2 . . ., I need to declare them as > global. > > The problem is that I work on big projects with other people. These > projects might have a large macro, call it top, which would call my > macro, call it middle1, which uses ScanList as well as Jones' macro, > call it middle2, which also calls ScanList. But Jones and I may not know > about each other and now the global variables (which we really want to > be *local* to middle1 and middle2) can conflict with each other in top. > This is a problem. How should we solve it? How do we "transfer" a macro > variable created in ScanList to the calling macro without making that > macro variable global? >


Back to: Top of message | Previous page | Main SAS-L page