do i=1 to 15;
if dxtrialpci{i} in ('0066', '3604', '3606', '3607') then do;
pcitrial=1;
return; /*leave;*/
end;
end;
'return', 'leave' can do the same thing in THIS context. I suspect 'return' is more efficient, as it does not execute rest of the code.
so is this how it will be?
if dxtrialpci{i} in ('0066', '3604', '3606', '3607') then do;
pcitrial=1;
return;
end;
if n (pr1, pr1, pr3, pr4, pr5, pr6, pr7, pr8, pr9, pr10, pr11, pr12, pr13, pr14, pr15)=0 then pcitrial=. ;
run;
option missing= ' ';
sorry about that... somehow after posting, someof the lines got deleted..
so this is how it will be..
option missing= ' ';
set library.nismicathcabg4;
array dxtrialpci{15} pr1-pr15;
pcitrial=0;
do i=1 to 15;
if dxtrialpci{i} in ('0066', '3604', '3606', '3607') then do;
pcitrial=1;
return;
end;
end;
if n (pr1, pr1, pr3, pr4, pr5, pr6, pr7, pr8, pr9, pr10, pr11, pr12, pr13, pr14, pr15)=0 then pcitrial=. ;
run;
This one should do.
even after modifying.. somehow it is still showing me one missing case as it was shwoing me with earlier version..not sure why?
If it is just one missing case, it does not hurt to bring it up and check it out?
i tried to find out that case using the following.
but the new datset shows no cases at all.. that means there is NOT a single case with missing data for PR1--PR15..
data library.nismicathcabg6;
set library.nismicathcabg4 ;
if pr1= ' ' and pr2= ' ' and pr3= ' ' and pr4= ' ' and pr5= ' ' and pr6= ' ' and pr7= ' ' and pr8= ' ' and pr9= ' ' and pr10= ' ' and pr11= ' ' and pr12= ' ' and pr13= ' '
and pr14= ' ' and pr15= ' ';
run;
I am a bit confused now. So after you dig that record out, what exactly it looks like? I suppose they are all numeric, then why you use pr1=' ' etc to retrieve it? why not use pr1=. and ...
if you want to save some typing, use nmiss() ,cmiss() or coalesce() .
or if you don't want to be concern of their type, use if missing(pr1) and missing (pr2)...
There is not such record with data missing for all from PR1-PR15.
These are variables with non-numeric data and the missing is indicated as " " that is why Ihad use the above code..
I wrote all that just to make sure if there is or there isnt such case..
what you suggested in the last line, "use if missing(pr1) and missing (pr2)..." that also I will have to ffor all 15 variables..so its tooo a bit of writing.
I used that program for some other codes from PR1-PR15, but it still shows me one missing case, and the one you posted in your first response, is not showing me any missing case,
I guess there is something in this program..that i copied below..that is showing one missing case.
option missing= ' ';
set library.nismicathcabg4;
array dxtrialpci{15} pr1-pr15;
pcitrial=0;
do i=1 to 15;
if dxtrialpci{i} in ('0066', '3604', '3606', '3607') then do;
pcitrial=1;
return;
end;
end;
if n (pr1, pr1, pr3, pr4, pr5, pr6, pr7, pr8, pr9, pr10, pr11, pr12, pr13, pr14, pr15)=0 then pcitrial=. ;
run;
also Haikuo,
I am running some other variables using your version of array.. and that shows me a missing case as a blank cell. Where and what do I say in the program to indicate the missing data as " ." (a period ?)
Thanks a lot Haikuo! It was a tremendous help for you today. I used your version of array program and also verified the results.
Thanks again,
Best
Ashwini
* from you.. (sorry typo )_
where is your do-loop? you may want to post your full code, or like you said, use the one in my first reply to you.
Instead of trying to incorporate in the array test the values first;
if cats( of Pr:) = '' then pci=.; /* assums only the variablse PR1- PR15 named starting with PR, may need ( of PR1-PR15)*/
else do i=1 to15;
...
end;
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
ANOVA, or Analysis Of Variance, is used to compare the averages or means of two or more populations to better understand how they differ. Watch this tutorial for more.
Find more tutorials on the SAS Users YouTube channel.