Chapter Contents

Previous

Next
$VARYINGw.

$VARYINGw.



Reads character data of varying length

Valid: in a DATA step
Category: Character


Syntax
Syntax Description
Details
Examples
Example 1: Obtaining a Current Record Length Directly
Example 2: Obtaining a Record Length Indirectly

Syntax

$VARYINGw. length-variable

Syntax Description

w
specifies the maximum width of a character field for all the records in an input file.
Default: 8 if the length of the variable is undefined; otherwise, the length of the variable
Range: 1-32767

length-variable
specifies a numeric variable that contains the width of the character field in the current record. SAS obtains the value of length-variable by reading it directly from a field that is described in an INPUT statement or by calculating its value in the DATA step.

Requirement: You must specify length-variable immediately after $VARYINGw. in an INPUT statement.
Restriction: Length-variable cannot be an array reference.
Tip: If length-variable is less than 1 or is missing, SAS reads no data from the corresponding record. This enables you to read both zero-length records and fields. If length-variable is greater than 0 but less than w, SAS reads the number of columns that are specified by length-variable. Then SAS pads the value with trailing blanks up to the maximum width that is assigned to the variable. If length-variable is greater than or equal to w, SAS reads w columns.


Details

Use $VARYINGw. when the length of a character value differs from record to record. After reading a data value with $VARYINGw., the pointer's position is set to the first column after the value.


Examples

Example 1: Obtaining a Current Record Length Directly

input fwidth 1. name $varying9. fwidth;

Data Lines* Results
----+----1

5shark
shark
3sunfish
sun
8bluefish
bluefish 
*Notice the result of reading the second data line.


Example 2: Obtaining a Record Length Indirectly

Use the LENGTH= option in the INFILE statement to obtain a record length indirectly. The input data lines and results follow the explanation of the SAS statements.

data one;
   infile file-specification length=reclen;
   input @;
   fwidth=reclen-9;
   input name $ 1-9
         @10 class $varying20. fwidth;
run;

The LENGTH= option in the INFILE statement assigns the internally stored record length to RECLEN when the first INPUT statement executes. The trailing @ holds the record for another INPUT statement. Next, the assignment statement calculates the value of the varying-length field by subtracting the fixed-length portion of the record from the total record length. The variable FWIDTH contains the length of the last field and becomes the length-variable argument to the $VARYING20. informat.

Data Lines Results
----+----1----+----2
PATEL    CHEMISTRY
PATEL    CHEMISTRY
JOHNSON  GEOLOGY
JOHNSON  GEOLOGY
WILCOX   ART
WILCOX   ART


Chapter Contents

Previous

Next

Top of Page

Copyright 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.