Hi,
I have a large number of columns and rows.
I want to delete a row of data if one specific variable is missing (FIRMID) which is a numerical variable
I tried the following but it didn't seem to work
data want;
set have;
if FIRMID = . then delete;
run;
Any help appreciated.
While few people use them, there are special missing values that are different from the usual numeric missing value. Technically, this would be safer:
data want;
set have;
if firmid <= .Z then delete;
run;
Notice there is a . before the Z (.Z, not just Z).
It's not likely that this is what is happening here, but it is really the only way to explain an otherwise simple program.
ideally it should work, the code of yours is fine.
Please try
data want;
set have;
where firmid ne . ;
run;
Thanks,
Jagadish
Your code looks fine to me. Is FIRMID character or numeric?
You could try instead:
data want;
set have;
if missing(FIRMID) then delete;
run;
While few people use them, there are special missing values that are different from the usual numeric missing value. Technically, this would be safer:
data want;
set have;
if firmid <= .Z then delete;
run;
Notice there is a . before the Z (.Z, not just Z).
It's not likely that this is what is happening here, but it is really the only way to explain an otherwise simple program.
Astounding beats me, yes, the safest way to rule missing value is to do something as suggested: missing() function:
data test;
input FIRMID;
cards;
1
2
.
._
.A
.B
.Z
;
DATA MISS1;
SET TEST;
if FIRMID = . then delete;
run;
DATA MISS2;
SET TEST;
IF MISSING(FIRMID) THEN DELETE;
RUN;
PROC PRINT DATA=MISS1;RUN;
Obs FIRMID
1 1
2 2
3 _
4 A
5 B
6 Z
PROC PRINT DATA=MISS2;RUN;
Obs FIRMID
1 1
2 2
Haikuo
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.