deleting row with missing observation

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 15
Accepted Solution

deleting row with missing observation

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.


Accepted Solutions
Solution
‎10-21-2013 11:22 PM
Super User
Posts: 5,081

Re: deleting row with missing observation

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.

View solution in original post


All Replies
Trusted Advisor
Posts: 1,128

Re: deleting row with missing observation

ideally it should work, the code of yours is fine.

Please try

data want;

     set have;

where firmid ne . ;

run;

Thanks,

Jagadish

Thanks,
Jag
Respected Advisor
Posts: 3,887

Re: deleting row with missing observation

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;

Solution
‎10-21-2013 11:22 PM
Super User
Posts: 5,081

Re: deleting row with missing observation

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.

Respected Advisor
Posts: 3,124

Re: deleting row with missing observation

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

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 4 replies
  • 5691 views
  • 6 likes
  • 5 in conversation