Date: Tue, 6 Apr 2010 08:34:25 -0700
Reply-To: Sterling Paramore <gnilrets@GMAIL.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Sterling Paramore <gnilrets@GMAIL.COM>
Subject: Re: vvaluex error handling
In-Reply-To: <037AB3FF38D44C4BAFB5DFF3D06B57BA40E7277D@EX-CMS01.westat.com>
Content-Type: text/plain; charset=ISO-8859-1
Yeah, but I imagine that the coding overhead for CALL VNEXT or some other
datastep tracking algorithm would be about the same as doing it all with
dictionary tables and macro logic, which could potentially be much faster.
I was hoping for a simple IF/THEN statement.
Thanks,
Sterling
On Tue, Apr 6, 2010 at 8:01 AM, Mike Rhoads <RHOADSM1@westat.com> wrote:
> As an alternative to the OPEN function, you could use the CALL VNEXT
> routine to iterate through the DATA step program data vector and build the
> list of relevant variables.
>
>
> Mike Rhoads
> RhoadsM1@Westat.com
>
>
> -----Original Message-----
> From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of Scott
> Barry
> Sent: Monday, April 05, 2010 9:21 PM
> To: SAS-L@LISTSERV.UGA.EDU
> Subject: Re: vvaluex error handling
>
> On Mon, 5 Apr 2010 21:17:26 -0400, Scott Barry <sbarry@SBBWORKS.COM>
> wrote:
>
> >On Mon, 5 Apr 2010 18:01:24 -0700, Sterling Paramore <gnilrets@GMAIL.COM>
> wrote:
> >
> >>Thanks, I've never used the "open" command before. Do you know what kind
> of
> >>performance hits there could be if it's executed each step?
> >>
> >>-Sterling
> >>
> >>On Mon, Apr 5, 2010 at 5:48 PM, Scott Barry <sbarry@sbbworks.com> wrote:
> >>
> >>> On Mon, 5 Apr 2010 15:32:19 -0700, Sterling Paramore <
> gnilrets@GMAIL.COM>
> >>> wrote:
> >>>
> >>> >Dear SAS-L,
> >>> >
> >>> >I have some data with variable names like MembsEnr_Eff_Flag_200912,
> >>> >MembsEnr_Eff_Flag_201001, etc. (MembsEnr_Eff_Flag_YYYYMM). These
> fields
> >>> are
> >>> >either "Y" or "N". I also have another variable called
> >>> 'Membs_Enroll_yrmo,'
> >>> >but not all yearmonth values have a corresponding
> MembsEnr_Eff_Flag_YYYYMM
> >>> >field. I want to return rows where the flag field is "Y" and YYYYMM =
> >>> >'Membs_Enroll_yrmo'. I thought I'd use the vvaluex function (one I
> read
> >>> >about on this list, go SAS-L!),
> >>> >
> >>> >data EnrEff;
> >>> > set Enr (obs = 10);
> >>> > if vvaluex(cats("MembsEnr_Eff_Flag_",Membs_Enroll_yrmo)) = "Y"
> then
> >>> >output;
> >>> >run;
> >>> >
> >>> >This seems to work, but for every row where the variable does not
> exist, I
> >>> >get the following error message:
> >>> >
> >>> >NOTE: Argument to function VVALUEX is not a known variable name:
> >>> >MembsEnr_Eff_Flag_200812.
> >>> >NOTE: Invalid argument to function VVALUEX at line 18 column 8.
> >>> >
> >>> >
> >>> >The dataset is 90 million rows, so the log quickly grows too large to
> >>> handle
> >>> >with this output. Is there any way to suppress the note in the log or
> do
> >>> >better error handling? I was hoping for something like:
> >>> >
> >>> > if vvalue_exist(...) then ....
> >>> >
> >>> >
> >>> >
> >>> >
> >>> >Thanks,
> >>> >Sterling
> >>>
> >>> Suggested Google advanced search argument:
> >>> variable exist sas member site:sas.com
> >>>
> >>> Results (one of several) yielded:
> >>>
> >>> Sample 26003: Programatically determine if a variable exists in a data
> set
> >>> http://support.sas.com/kb/26/003.html
> >>>
> >>> Scott Barry
> >>> SBBWorks, Inc.
> >>>
> >
> >As a courtesy for subscriber privacy, reply on-list only, so that all
> >subscribers might have an opportunity to respond to your post/reply.
> >
> >Thank you, Scott
>
>
> Your technical approach to addressing the situation with OPEN will
> determine
> the impact - however you will likely only want to execute the test once,
> building a list of variables to use with your SAS application program.
>
> Scott Barry
> SBBWorks, Inc.
>
|