Date: Fri, 3 Jun 2005 12:22:17 -0400
Reply-To: Venky Chakravarthy <swovcc@HOTMAIL.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Venky Chakravarthy <swovcc@HOTMAIL.COM>
Subject: Re: using Perl regex to validate values in SAS 9.1
Content-Type: text/plain; charset=ISO-8859-1
What are the rules for Van Husen, Jeff who has both Phone1 and Phone2
missing?
On Fri, 3 Jun 2005 15:40:21 +0200, Rune Runnestø <rune@FASTLANE.NO> wrote:
>Yet another small justification of the conditions.
>The criteria for the records in the dataset WRONGRECORDS is that there
shall
>be one or more non-numbers in one or both of the columns phone1 and phone2.
>The code seems to work OK with one exception: The record with Mary O'Reily
>should not be in WRONGRECORDS. Because blank values are allowed (phone1). I
>*suppose* it has come here because of the blank value in phone1.
>
>
>data staff;
> attrib name length=$20
> phone1 length=$12
> phone2 length=$12;
> infile cards;
> input @1 name $20.
> @21 phone1 $12.
> @34 phone2 $12.;
>datalines;
>O'Reily, Mary 123456789888
>Pyles, Jane 2B3667567715 987654328887
>Hoffman, Valerie 2C268660808 234234234234
>Dawn, Jennifer 718638361549 5B7898765476
>Van Husen, Jeff
>Sim-Smith, Angela 201681265665 5C9876567865
>Timmons, David 5866806 34543234
>Benjamin, Catherine 203678161777 234567432334
>Windsor, Stephen 718638462849 876422345564
>Richardson, Larry 718638468816 556768432234
>Bellum, Sarah 2066756434 3454799665
>Garcia Tracy 21268761247 348564332
>Montgomery, Adam 212658763622 789023456677
>George, Clara 203678161212 345656667777
>Sabatini, Anthony 203678160019 3E5678932RT5
>;
>run;
>
>data wrongrecords;
> set staff;
> where not missing(phone1) or not missing(phone2); /* we want to push
>away
> the records where *both* phone1 and phone2 are blank.
> If we had used 'and' instead of 'or', we would wrongly
> pushed away Mary O'Reily too. */
> *alternatively, we could have used this sentence:;
> *where phone1 ne "" or phone2 ne "";
> if _n_ = 1 then
> do;
> retain re;
> re = prxparse('/[^\d]/'); /* match only non-numbers*/
> if missing(re) then
> do;
> putlog 'ERROR: malformed regex';
> stop;
> end;
> end;
> if prxmatch(re,trim(phone1)) or prxmatch(re,trim(phone2));
>run;
>
>
>Regards
>Rune
|