LOSTCARD Statement


LOSTCARD Statement

Resynchronizes the input data when SAS encounters a missing or invalid record in data that has multiple records per observation

Valid: in a DATA step

Category: Action

Type: Executable

Syntax

LOSTCARD ;

Without Arguments

The LOSTCARD statement prevents SAS from reading a record from the next group when the current group has a missing record.

Details

When to Use LOSTCARD When SAS reads multiple records to create a single observation, it does not discover that a record is missing until it reaches the end of the data. If there is a missing record in your data, the values for subsequent observations in the SAS data set may be incorrect. Using LOSTCARD prevents SAS from reading a record from the next group when the current group has fewer records than SAS expected.

LOSTCARD is most useful when the input data have a fixed number of records per observation and when each record for an observation contains an identification variable that has the same value. LOSTCARD usually appears in conditional processing, for example, in the THEN clause of an IF-THEN statement, or in a statement in a SELECT group.

When LOSTCARD Executes When LOSTCARD executes, SAS takes these steps:

  1. Writes three items to the SAS log: a lost card message, a ruler, and all the records that it read in its attempt to build the current observation.

  2. Discards the first record in the group of records being read, does not write an observation, and returns processing to the beginning of the DATA step.

  3. Does not increment the automatic variable _N_ by 1. (Normally, SAS increments _N_ by 1 at the beginning of each DATA step iteration.)

  4. Attempts to build an observation by beginning with the second record in the group, and reads the number of records that the INPUT statement specifies.

  5. Repeats steps 1 through 4 when the IF condition for a lost card is still true. To make the log more readable, SAS prints the message and ruler only once for a given group of records. In addition, SAS prints each record only once, even if a record is used in successive attempts to build an observation.

  6. Builds an observation and writes it to the SAS data set when the IF condition for a lost card is no longer true.

Examples

This example uses the LOSTCARD statement in a conditional construct to identify missing data records and to resynchronize the input data:

 data inspect;     input id 1   3 age 8   9 #2 id2 1   3 loc           #3 id3 1   3 wt;     if id ne id2 or id ne id3 then      do;        put 'DATA RECORD ERROR: ' id= id2= id3=;        lostcard;      end;     datalines;  301    32  301    61432  301    127  302    61  302    83171  400    46  409    23145  400    197  411    53  411    99551  411    139  ; 

The DATA step reads three input records before writing an observation. If the identification number in record 1 (variable ID) does not match the identification number in the second record (ID2) or third record (ID3), a record is incorrectly entered or omitted. The IF-THEN DO statement specifies that if an identification number is invalid, SAS prints the message that is specified in the PUT statement message and executes the LOSTCARD statement.

In this example, the third record for the second observation (ID3=400) is missing. The second record for the third observation is incorrectly entered (ID=400 while ID2=409). Therefore, the data set contains two observations with ID values 301 and 411. There are no observations for ID=302 or ID=400. The PUT and LOSTCARD statements write these statements to the SAS log when the DATA step executes:

Output 7.15
start example
 DATA RECORD ERROR: id=302 id2=302 id3=400  NOTE: LOST CARD.  RULE:----+----1----+----2----+----3----+----4----+----5----+---- 4   302    61  5   302    83171  6   400    46  DATA RECORD ERROR: id=302 id2=400 id3=409  NOTE: LOST CARD.  7   409    23145  DATA RECORD ERROR: id=400 id2=409 id3=400  NOTE: LOST CARD.  8   400    197  DATA RECORD ERROR: id=409 id2=400 id3=411  NOTE: LOST CARD.  9   411    53  DATA RECORD ERROR: id=400 id2=411 id3=411  NOTE: LOST CARD.  20   411    99551 
end example
 

The numbers 14, 15, 16, 17, 18, 19, and 20 are line numbers in the SAS log.

See Also

Statement:

  • IF-THEN/ELSE Statement on page 1213




SAS 9.1 Language Reference Dictionary, Volumes 1, 2 and 3
SAS 9.1 Language Reference Dictionary, Volumes 1, 2 and 3
ISBN: N/A
EAN: N/A
Year: 2004
Pages: 704

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net