diff --git a/base/mp_abort.sas b/base/mp_abort.sas index ff8926d..039272a 100644 --- a/base/mp_abort.sas +++ b/base/mp_abort.sas @@ -89,7 +89,12 @@ or "&SYSPROCESSNAME "="Compute Server " or &mode=INCLUDE %then %do; - options obs=max replace nosyntaxcheck mprint; + options obs=max replace mprint; + %if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" + %then %do; + options nosyntaxcheck; + %end; + %if &mode=INCLUDE %then %do; %if %sysfunc(exist(&errds))=1 %then %do; data _null_; diff --git a/base/mp_getmaxvarlengths.sas b/base/mp_getmaxvarlengths.sas index 133f249..92d422f 100755 --- a/base/mp_getmaxvarlengths.sas +++ b/base/mp_getmaxvarlengths.sas @@ -41,6 +41,7 @@

SAS Macros

@li mcf_length.sas @li mf_getuniquename.sas + @li mf_getvarcount.sas @li mf_getvarlist.sas @li mf_getvartype.sas @li mf_getvarformat.sas @@ -60,7 +61,7 @@ ,outds=work.mp_getmaxvarlengths )/*/STORE SOURCE*/; -%local vars prefix x var fmt; +%local vars prefix x var fmt srcds; %let vars=%mf_getvarlist(libds=&libds); %let prefix=%substr(%mf_getuniquename(),1,25); %let num2char=%upcase(&num2char); @@ -70,6 +71,24 @@ %mcf_length(wrap=YES, insert_cmplib=YES) %end; +%if &num2char=NO + and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5") + and %mf_getvarcount(&libds,typefilter=N) gt 0 +%then %do; + /* custom functions not supported in summary operations */ + %let srcds=%mf_getuniquename(); + data &srcds/view=&srcds; + set &libds; + %do x=1 %to %sysfunc(countw(&vars,%str( ))); + %let var=%scan(&vars,&x); + %if %mf_getvartype(&libds,&var)=N %then %do; + &prefix.&x=mcf_length(&var); + %end; + %end; + run; +%end; +%else %let srcds=&libds; + proc sql; create table &outds (rename=( %do x=1 %to %sysfunc(countw(&vars,%str( ))); @@ -94,10 +113,15 @@ create table &outds (rename=( %end; %end; %else %do; - max(mcf_length(&var)) as &prefix.&x + %if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do; + max(&prefix.&x) as &prefix.&x + %end; + %else %do; + max(mcf_length(&var)) as &prefix.&x + %end; %end; %end; - from &libds; + from &srcds; proc transpose data=&outds out=&outds(rename=(_name_=NAME COL1=MAXLEN)); diff --git a/base/mp_storediffs.sas b/base/mp_storediffs.sas index 878cb55..96b645f 100644 --- a/base/mp_storediffs.sas +++ b/base/mp_storediffs.sas @@ -125,7 +125,7 @@ data &ds1; set &dslist indsname=&inds_auto; &hashkey=put(md5(catx('|',%mf_getquotedstr(&key,quote=N))),$hex32.); - &inds_keep=&inds_auto; + &inds_keep=upcase(&inds_auto); proc sort; by &inds_keep &hashkey; run; @@ -160,8 +160,8 @@ data &ds4; tgtvar_nm=upcase(tgtvar_nm); if tgtvar_nm in (%upcase(&vlist)); - if &inds_auto="&ds2" then tgtvar_type='N'; - else if &inds_auto="&ds3" then tgtvar_type='C'; + if upcase(&inds_auto)="&ds2" then tgtvar_type='N'; + else if upcase(&inds_auto)="&ds3" then tgtvar_type='C'; else do; putlog "%str(ERR)OR: unidentified vartype input!" &inds_auto; call symputx('syscc',98); diff --git a/tests/crossplatform/mf_getvarcount.test.sas b/tests/crossplatform/mf_getvarcount.test.sas index bdf23b9..dabe961 100644 --- a/tests/crossplatform/mf_getvarcount.test.sas +++ b/tests/crossplatform/mf_getvarcount.test.sas @@ -4,6 +4,7 @@

SAS Macros

@li mf_getvarcount.sas + @li mp_assertscope.sas **/ @@ -13,6 +14,10 @@ data work.all work.nums(keep=num1 num2) work.chars(keep=char1 char2); output; run; +%mp_assertscope(SNAPSHOT) +%put scope check:%mf_getvarcount(work.all); +%mp_assertscope(COMPARE) + %mp_assert( iftrue=(%mf_getvarcount(work.all)=5), desc=%str(Checking for mixed vars), diff --git a/tests/crossplatform/mp_getmaxvarlengths.test.sas b/tests/crossplatform/mp_getmaxvarlengths.test.sas index 2ec974f..baf1e6e 100644 --- a/tests/crossplatform/mp_getmaxvarlengths.test.sas +++ b/tests/crossplatform/mp_getmaxvarlengths.test.sas @@ -10,10 +10,48 @@ **/ +data work.class ; +attrib +Name length= $8 +Sex length= $1 +Age length= 8 +Height length= 8 +Weight length= 8 +; +infile cards dsd; +input + Name :$char. + Sex :$char. + Age + Height + Weight +; +datalines4; +Alfred,M,14,69,112.5 +Alice,F,13,56.5,84 +Barbara,F,13,65.3,98 +Carol,F,14,62.8,102.5 +Henry,M,14,63.5,102.5 +James,M,12,57.3,83 +Jane,F,12,59.8,84.5 +Janet,F,15,62.5,112.5 +Jeffrey,M,13,62.5,84 +John,M,12,59,99.5 +Joyce,F,11,51.3,50.5 +Judy,F,14,64.3,90 +Louise,F,12,56.3,77 +Mary,F,15,66.5,112 +Philip,M,16,72,150 +Robert,M,12,64.8,128 +Ronald,M,15,67,133 +Thomas,M,11,57.5,85 +William,M,15,66.5,112 +;;;; +run; /* regular usage */ %mp_assertscope(SNAPSHOT) -%mp_getmaxvarlengths(sashelp.class,outds=work.myds) +%mp_getmaxvarlengths(work.class,outds=work.myds) %mp_assertscope(COMPARE,desc=checking scope leakage on mp_getmaxvarlengths) %mp_assert( iftrue=(&syscc=0),