Chapter Contents |
Previous |
Next |
FILE |
Valid: | in a DATA step |
Category: | File-handling |
Type: | Executable |
Syntax |
FILE file-specification <options> <host-options>; |
Arguments |
Requirement: | You must have previously associated fileref with an external file in a FILENAME statement or function, or in an appropriate operating environment command. There is only one exception to this rule: when you use the FILEVAR= option, the fileref is simply a placeholder. |
See Also: | FILENAME |
Requirement: | You must previously associate fileref with an external file in a FILENAME statement or function, or in an appropriate operating environment command. |
See Also: | FILENAME |
Operating Environment Information: Different operating environments call an aggregate grouping of files by different names, such as a directory, a MACLIB, or a partitioned data set. For details, see the SAS documentation for your operating environment.
At the beginning of each execution of a DATA step, the fileref that indicates where the PUT statements write is automatically set to LOG. Therefore, the first PUT statement in a DATA step always writes to the SAS log, unless it is preceded by a FILE statement that specifies otherwise.
Tip: | Because output lines are by default written to the SAS log, use a FILE LOG statement to restore the default action or to specify additional FILE statement options. |
Interaction: | When you write to a print file, the value of the N= option must be either 1 or PAGESIZE. |
Tip: | When PRINT is the fileref, SAS uses carriage control characters and writes the output with the characteristics of a print file. |
See Also: | A complete discussion of print files in "DATA Step Processing" in SAS Language Reference: Concepts. |
Operating Environment Information: The carriage control characters that are written to a file can be specific to the operating environment. For details, see the SAS documentation for your operating environment.
Options |
Default: | Depends on your operating environment. |
Operating Environment Information: The default value of the block size is dependent on the operating environment. For details, see the SAS documentation for your operating environment.
Alias: | COL= |
Alias: | DLM |
Restriction: | Even though a character string or character variable is accepted, only the first character of the string or variable is used as the output delimiter. This differs from INFILE DELIMITER= processing. |
Interaction: | Output that contains embedded delimiters requires the DSD option. |
Tip: | The delimiter can be used with the colon (:) modifier (modified LIST output). |
See Also: | DSD |
Default: | FLOWOVER |
Explanation: | By default, data that exceed the current line length are written on a new line. When you specify DROPOVER, SAS drops (or ignores) an entire item when there is not enough space in the current line to write it. When this occurs, the column pointer remains positioned after the last value that is written in the current line. Thus, the PUT statement may write other items in the current output line if they fit in the space that remains or if the column pointer is repositioned. When a data item is dropped, the DATA step continues normal execution (_ERROR_=0). At the end of the DATA step, a message is printed for each file from which data were lost. |
Tip: | Use DROPOVER when you want the DATA step to continue executing if the PUT statement attempts to write past the current line length, but you do not want the data item that exceeds the line length to be written on a new line. |
See Also: | FLOWOVER and STOPOVER |
Interaction: | If you specify DSD, the default delimiter is assumed to be the comma (,). Specify the DELIMITER= option if you want to use a different delimiter. |
Tip: | By default, data items that do not contain the specified delimiter are not quoted. However, you can use the tilde (~) modifier to force any data item to be quoted, even if it contains no embedded delimiter. |
See Also: | DELIMITER= |
Tip: | This variable, like automatic variables, is not written to the data set. |
Tip: | Use a LENGTH statement to make the variable length long enough to contain the value of the physical filename if it is longer than eight characters (the default length of a character variable). |
See Also: | FILEVAR= |
Featured in: | Identifying the Current Output File |
Restriction: | The value of a FILEVAR= variable is expressed as a character string that contains a physical filename. |
Interaction: | When you use the FILEVAR= option, the file-specification is just a placeholder, not an actual filename or a fileref that has been previously-assigned to a file. SAS uses this placeholder for reporting processing information to the SAS log. It must conform to the same rules as a fileref. |
Tip: | This variable, like automatic variables, is not written to the data set. |
Tip: | If any of the physical filenames is longer than eight characters (the default length of a character variable), assign the FILEVAR= variable a longer length with another statement, such as a LENGTH statement or an INPUT statement. |
See Also: | FILENAME= |
Featured in: | Dynamically Changing the Current Output File |
Default: | FLOWOVER |
Interaction: | If the PUT statement contains a trailing @, the pointer is positioned after the data item on the new line, and the next PUT statement writes to that line. This process continues until the end of the input data is reached or until a PUT statement without a trailing @ causes the current line to be written to the file. |
See Also: | DROPOVER and STOPOVER |
Alias: | FOOTNOTE | NOFOOTNOTE |
Requirement: | In order to print footnotes in a DATA step report, you must set the FOOTNOTE option in the FILE statement. |
Default: | NOFOOTNOTES |
Restriction: | The first statement after the label must be an executable statement. Thereafter you can use any SAS statement. |
Restriction: | Use the HEADER= option only when you write to print files. |
Tip: | To prevent the statements in this group from executing with each iteration of the DATA step, use two RETURN statements: one precedes the label and the other appears as the last statement in the group. |
Featured in: | Executing Statements When a New Page Is Begun |
Range: | 1 to the value that is specified by the N= option or with the #n line pointer control. If neither is specified, the LINE= variable has a value of 1. |
Tip: | This variable, like automatic variables, is not written to the data set. |
Tip: | The value of the LINE= variable is set at the end of PUT statement execution to the number of the next available line. |
Alias: | LS= |
Default: | The default LINESIZE=
value is determined by one of two options:
|
Range: | From 64 to the maximum
logical record length that is allowed for a specific file in your operating
environment. For details, see the SAS documentation for your operating
environment.
Operating Environment Information: The highest value allowed for LINESIZE= is dependent on your operating environment. |
Interaction: | If a PUT statement tries to write a line that is longer than the value that is specified by the LINESIZE= option, the action that is taken is determined by whether FLOWOVER, DROPOVER, or STOPOVER is in effect. By default (FLOWOVER), SAS writes the line as two or more separate records. |
Comparisons: | LINESIZE= tells SAS how much of the line to use. LRECL= specifies the physical record length of the file. |
See Also: | LRECL=, DROPOVER, FLOWOVER, and STOPOVER |
Featured in: | When the Output Line Exceeds the Line Length of the Output File |
Alias: | LL= |
Tip: | This variable, like automatic variables, is not written to the data set. |
Featured in: | Determining New Page by Lines Left on the Current Page |
Default: | If you omit the LRECL= option, SAS chooses a value based on the operating environment's file characteristics. |
Operating Environment Information: Values for logical-record-length are dependent on the operating environment. For details, see the SAS documentation for your operating environment.
Comparisons: | LINESIZE= tells SAS how much of the line to use; LRECL= specifies the physical line length of the file. |
See Also: | LINESIZE=, PAD, and PAGESIZE= |
Default: | OLD |
Restriction: | MOD is not accepted
under all operating environments.
Operating Environment Information: For details, see the SAS documentation for your operating environment. |
See Also: | OLD |
Alias: | PS |
Restriction: | N=PAGESIZE is valid only when output is sent to a print file. |
Restriction: | If the current output file is a print file, available-lines must have a value of either 1 or PAGESIZE. |
Interactions: | There are two ways
to control the number of lines available to the output pointer:
|
Interaction: | If you omit the N= option and no # pointer controls are used, one line is available; that is, by default, N=1. If N= is not used but there are # pointer controls, N= is assigned the highest value that is specified for a # pointer control in any PUT statement in the current DATA step. |
Tip: | Setting N=PAGESIZE enables you to compose a page of multiple columns one column at a time. |
Featured in: | Arranging the Contents of an Entire Page |
Tip: | If the number of bytes to be read is set to -1, the FTP and SOCKET access methods return the number of bytes that are currently available in the input buffer. |
Featured in: | Reading Data and Writing Text Through a TCP/IP Socket |
See also: | the RECFM= option in the FILENAME-FTP statement |
Default: | If you omit the ODS
suboptions, the DATA step uses a default table definition (base.datastep.table)
that is stored in the SASHELP data library. This definition defines two generic
columns: one for character variables, and one for numeric variables. ODS associates
each variable in the DATA step with one of these columns and displays the
variables in the order in which they are defined in the DATA step.
Without suboptions, the default table definition uses the variable's label as its column header. If no label exists, the definition uses the variable's name as the column header. |
Requirement: | The ODS option is valid only when you use the fileref PRINT in the FILE statement. |
Restriction: | You cannot use the _FILE_=, FILEVAR=, HEADER=, and PAD options with the ODS option. |
Interaction: | The DELIMITER= and DSD options have no effect on the ODS option. The FOOTNOTES|NOFOOTNOTES, LINESIZE, PAGESIZE, and TITLES | NOTITLES options only have an effect on the listing destination. |
Default: | OLD |
Restriction: | OLD is not accepted
under all operating environments.
Operating Environment Information: For details, see the SAS documentation for your operating environment. |
See Also: | MOD |
Default: | NOPAD is the default when writing to a variable-length file; PAD is the default when writing to a fixed-length file. |
Tip: | PAD provides a quick way to create fixed-length records in a variable-length file. |
See Also: | LRECL= |
Alias: | PS= |
Default: | the value of the PAGESIZE= system option. |
Range: | The value may range from 15 to 32767. |
Interaction: | If any TITLE statements are currently defined, the lines they occupy are included in counting the number of lines for each page. |
Tip: | After the value of the PAGESIZE= option is reached, the output pointer advances to line 1 of a new page. |
See Also: | PAGESIZE= |
Restriction: | When you write to a print file, the value of the N= option must be either 1 or PAGESIZE. |
Tip: | The PRINT option is not necessary if you are using fileref PRINT. |
Operating Environment Information: The carriage control characters that are written to a file can be specific to the operating environment. For details, see the SAS documentation for your operating environment.
Range: | Values are dependent on the operating environment. |
Operating Environment Information: Values for record-format are dependent on the operating environment. For details, see the SAS documentation for your operating environment.
Default: | FLOWOVER |
See Also: | FLOWOVER and DROPOVER |
Alias: | TITLE | NOTITLE |
Default: | TITLES |
Restriction: | variable cannot be a previously defined variable. Make sure that the _FILE_= specification is the first occurrence of this variable in the DATA step. Do not set or change the length of _FILE_= variable with the LENGTH or ATTRIB statements. However, you can attach a format to this variable with the ATTRIB or FORMAT statement. |
Interaction: | The maximum length of this character variable is the logical record length (LRECL) for the specified FILE statement. However, SAS does not open the file to know the LRECL until prior to the execution phase. Therefore, the designated size for this variable during the compilation phase is 32,767. |
Tip: | Modification of this variable directly modifies the FILE statement's current output buffer. Any subsequent PUT statement for this FILE statement outputs the contents of the modified buffer. The _FILE_= variable accesses only the current output buffer of the specified FILE statement even if you use the N= option to specify multiple output buffers. |
Tip: | To access the contents of the output buffer in another statement without using the _FILE_= option, use the automatic variable _FILE_. |
Main Discussion: | Accessing the Contents of the Output Buffer |
Host Options |
Operating Environment Information: For descriptions of host-specific options on the FILE statement, see the SAS documentation for your operating environment.
Details |
By default, PUT statement output is written to the SAS log. Use the FILE statement to route this output to either the same external file to which procedure output is written or to a different external file. You can indicate whether or not carriage control characters should be added to the file. See the PRINT | NOPRINT option .
You can use the FILE statement in conditional (IF-THEN) processing because it is executable. You can also use multiple FILE statements to write to more than one external file in a single DATA step.
Operating Environment Information: Using the FILE statement requires host-specific information. See the SAS documentation for your operating environment before you use this statement.
You can now use the Output Delivery System with the
FILE statement to write DATA step results. This functionality is briefly discussed
here. For details, see FILE, ODS.
For further information, see The Complete Guide to the SAS Output Delivery
System.
You can use the FILE statement with the INFILE and PUT statements to update an external file in place, updating either an entire record or only selected fields within a record. Follow these guidelines:
In addition to the _FILE_= variable, you can use the automatic _FILE_ variable to reference the contents of the current output buffer for the most recent execution of the FILE statement. This character variable is automatically retained and initialized to blanks. Like other automatic variable, _FILE_ is not written to the data set.
When you specify the _FILE_= option in a FILE statement then this variable is also indirectly referenced by the automatic _FILE_ variable. If the automatic _FILE_ variable is present and you omit _FILE_= in a particular FILE statement, then SAS creates an internal _FILE_= variable for that FILE statement. Otherwise, SAS does not create the _FILE_= variable for a particular FILE.
During execution and at the point of reference, the maximum length of this character variable is the maximum length of the current _FILE_= variable. However, because _FILE_ merely references other variables whose lengths are not known until prior to the execution phase, the designated length is 32,767 during the compilation phase. For example, if you assign _FILE_ to a new variable whose length is undefined, the default length of the new variable is 32,767. You can not use the LENGTH statement and the ATTRIB statement to set or override the length of _FILE_. You can use the FORMAT statement and the ATTRIB statement to assign a format to _FILE_.
Like other SAS variables, you can update the _FILE_ variable. The two methods are
file print; _file_='_FILE_'; put 'This is PUT';outputs
This is PUT
while
file print; _file_='This is from FILE, oh yeah'; put @14 'both';outputs
This is from both,
oh yeah
.file ABC; put 'Something' @; Y=trim(_file_)||' is here'; file ABC; put 'Nothing' ; y=trim(_file_)||' is here'; put y;Y is first assigned
Something
is here
then Y is assigned
is here
. _FILE_ only accesses the contents of the current output buffer for a FILE statement, even when you use the N= option to specify multiple buffers. You can access all the N= buffers, but you must use a PUT statement with the # line pointer control to make the desired buffer the current output buffer.
Comparisons |
Examples |
This DATA step illustrates how to use the HEADER= option:
data _null_; set sprint; by dept;
file print header=newpage;
if first.dept then put _page_; put @22 salesrep @34 salesamt;
return; newpage: put @20 'Sales for 1989' / @20 dept=; return; run;
This DATA step demonstrates using the LINESLEFT= option to determine where the page break should occur, according to the number of lines left on the current page.
data _null_; set info;
file print linesleft=remain pagesize=20; put @5 name @30 phone @35 bldg @37 room;
if remain<7 then put _page_ ; run;
This example shows use of N=PAGESIZE in a DATA step to produce a two-column telephone book listing, each column containing a name and a phone number:
data _null_; file 'external-file' print n=pagesize;
do col=1, 40;
do line=1 to 20; set info; put #line @col name $20. +1 phone 4.; end;
end; put _page_; run;
This DATA step causes a file identification message to print in the log and assigns the value of the current output file to the variable MYOUT. The PUT statement, demonstrating the assignment of the proper value to MYOUT, writes the value of that variable to the output file:
data _null_; length myout $ 200; file file-specification filename=myout; put myout=; stop; run;
The PUT statement writes a line to the current output file that contains the physical name of the file:
MYOUT=your-output-file
This DATA step uses the FILEVAR= option to dynamically change the currently opened output file to a new physical file.
data _null_; length name $ 200;
input name $;
file file-specification filevar=name mod; date = date();
put 'records updated ' date date.;
datalines; external-file-1 external-file-2 external-file-3 ;
Because the combined lengths of the variables are longer than the output line (80 characters), this PUT statement automatically writes three separate records:
file file-specification linesize=80; put name $ 1-50 city $ 71-90 state $ 91-104;
The value of NAME appears in the first record, CITY
begins in the first column of the second record, and STATE in the first column
of the third record.
This example shows reading raw data from a file through a TCP/IP socket. The NBYTE= option is used in the INFILE statement:
/* Start this first as the server */ filename serve socket ':5205' server recfm=s lrecl=25 blocksize=2500; data _null_; nb=25; infile serve nbyte=nb; input text $char25.; put _all_; run;
This example shows writing text to a file through a TCP/IP socket:
/* While the server test is running,*/ /*continue with this as the client. */ filename client socket "&hstname:5205" recfm=s lrecl=25 blocksize=2500; data _null_; file client; put 'Some text to length 25...'; run;
See Also |
Statements:
|
Chapter Contents |
Previous |
Next |
Top of Page |
Copyright 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.