Hi all, I'm currently convert the code in visualfoxpro to sas.
Is there any difference between isblank and isnull function in vfox?
if I write the code in sas like this below, is this correct?
VFOX CODE
use "D:\Fire\claim\Fire_clm_201903_addratecde.dbf"
scan for (not inli(allt(ratecde),"1000","COIN") and not isbl(ratecde) and not isnull(ratecde))
Do case
case inli(rsktyp,"FCL","FCZ","FLP")
repl cov_type with "Conloss"
case inli(rsktyp,"FAZ","FDA","FIA")
repl cov_type with "IAR"
case inli(left(allt(ratecde),4),"4006","4008")
repl cov_type with "HH"
case inli(left(allt(ratecde),4),"4001","4005")
repl cov_type with "HO"
otherwise
DO casecase inli(left(allt(ratecde),2),"10")
repl cov_type with "MD1"
case inli(left(allt(ratecde),2),"11")
repl cov_type with "MD2"
case inli(left(allt(ratecde),2),"12")
repl cov_type with "MD3"
case inli(left(allt(ratecde),2),"14")
repl cov_type with "MD4"
case inli(left(allt(ratecde),2),"29")
repl cov_type with "MD5"
otherwise
repl cov_type with "MD6"
endcase
endcase
endscan
MY Code in sas
if ratecde^='1000' and ratecde^='coin' and ratecde^='' then do;
if rsktyp in ('FCL','FCZ','FLP') then
cov_type='Conloss';
else if rsktyp in ('FAZ','FDA','FIA') then
cov_type='IAR';
else if test1 in ('4006','4008') then
cov_type='HH';
else if test1 in ('4001','4005') then
cov_type='HO';
else if test2=10 then
cov_type='MD1';
else if test2=11 then
cov_type='MD2';
else if test2=12 then
cov_type='MD3';
else if test2=14 then
cov_type='MD4';
else if test2=29 then
cov_type='MD5';
else
cov_type='MD6';
end;
I don't know vfox so don't know the intricacies of isblank and isnull.
Re: your code: I like the missing() function, as it "does the right thing" whether the variable is character or numeric:
data test;
chr1='';
chr2=' ';
chr3=' ';
chr4='foo';
num1=.;
num2=.a;
num3=.z;
num4=123;
ismiss_chr1=missing(chr1);
ismiss_chr2=missing(chr2);
ismiss_chr3=missing(chr3);
ismiss_chr4=missing(chr4);
ismiss_num1=missing(num1);
ismiss_num2=missing(num2);
ismiss_num3=missing(num3);
ismiss_num4=missing(num4);
run;
Wouldn't this be closer?
if strip(RATECDE) not in('1000', 'COIN', ' ') then do;
select;
when(RSKTYP in ('FCL','FCZ','FLP') ) COV_TYPE='Conloss';
when(RSKTYP in ('FAZ','FDA','FIA') ) COV_TYPE='IAR';
when(strip(RATECDE) in: ('4006','4008')) COV_TYPE='HH';
when(strip(RATECDE) in: ('4001','4005')) COV_TYPE='HO';
when(strip(RATECDE) =: '10' ) COV_TYPE='MD1';
when(strip(RATECDE) =: '11' ) COV_TYPE='MD2';
when(strip(RATECDE) =: '12' ) COV_TYPE='MD3';
when(strip(RATECDE) =: '14' ) COV_TYPE='MD4';
when(strip(RATECDE) =: '29' ) COV_TYPE='MD5';
otherwise COV_TYPE='MD6';
end;
end;
SAS stores character variables as fixed length strings that are padded with spaces. So SAS cannot tell the difference between a variable that is all blanks and a "null" or "missing" value.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.