From 532e0d535a384e1e83020d52edf83589c751b209 Mon Sep 17 00:00:00 2001 From: zver Date: Sun, 31 Dec 2023 00:35:11 +0000 Subject: [PATCH] fix: tests for char support, #368 --- base/mp_filtercheck.sas | 28 +++++++++++++++++++++++++++- tests/base/mp_filtercheck.test.sas | 1 + 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/base/mp_filtercheck.sas b/base/mp_filtercheck.sas index 16283e94..4de711c3 100644 --- a/base/mp_filtercheck.sas +++ b/base/mp_filtercheck.sas @@ -272,9 +272,35 @@ data &outds; /* output records that contain values other than digits and spaces */ if notdigit(compress(raw_value3,' '))>0 then do; + if vtype='C' and subpad(upcase(raw_value),1,1) in ( + 'A','B','C','D','E','F','G','H','I','J','K','L','M','N' + 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z','_' + ) + then do; + /* check if the raw_value contains a valid variable NAME */ + vnum=varnum(dsid,subpad(raw_value,1,32)); + if vnum>0 then do; + /* now we can get the type */ + vtype2=vartype(dsid,vnum); + /* check type matches */ + if vtype2=vtype then do; + /* valid target var - exit loop */ + return; + end; + else do; + REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")"); + putlog REASON_CD= dsid=; + call symputx('reason_cd',reason_cd,'l'); + call symputx('nobs',_n_,'l'); + output; + goto endstep; + end; + end; + end; + putlog raw_value3= $hex32.; REASON_CD=cats('Invalid RAW_VALUE:',raw_value); - putlog REASON_CD= raw_value= raw_value1= raw_value2= raw_value3=; + putlog (_all_)(=); call symputx('reason_cd',reason_cd,'l'); call symputx('nobs',_n_,'l'); output; diff --git a/tests/base/mp_filtercheck.test.sas b/tests/base/mp_filtercheck.test.sas index 66415730..c895f337 100644 --- a/tests/base/mp_filtercheck.test.sas +++ b/tests/base/mp_filtercheck.test.sas @@ -56,6 +56,7 @@ AND,AND,1,age,IN,"(.A)" AND,AND,1,AGE,=,AGE AND,AND,1,AGE,<,Weight AND,AND,1,AGE,BETWEEN,"HEIGHT AND WEIGHT" +AND,OR,2,Name,=,name ;;;; run;