Hi:
Some comments...when you use PUT (_ALL_) you are tellling SAS to write ALL of the variables from the PDV (Program Data Vector) to the output file specified on the FILE statement. When you use a PUT like this, what you can (and should) always specify is the format to use to write the variables. The ($) tells SAS to use a character format for EVERYTHING that's being written.
In addition, the DLM= option and the DSD options on the FILE statement tell SAS to use the tab character (09'x) as the separator/delimiter and the DSD option tells SAS to put quotes around variable values which contain spaces and special characters, as described here:
http://support.sas.com/documentation/cdl/en/lrdict/63026/HTML/default/viewer.htm#a000171874.htm
So in your case, the original PUT statement was never going to work:
[pre]
put (_all_)('09'x);
[/pre]
because ('09'x) is NOT a format -- it is what you wanted to use as a delimiter and it needed to be specified in the DLM= option. With just PUT (_ALL_) and NO format list, you would have gotten this error:
[pre]
1658 put (_all_);
-
79
76
ERROR 79-322: Expecting a (.
ERROR 76-322: Syntax error, statement will be ignored.
[/pre]
So the ($) made the PUT statement happy with a format to use for every variable in the PDV. And the DLM= option told SAS to use the tab as the separator.
cynthia