Does anyone know why my ods output file is not being created?
This is for a larger macro that I am working on, but I am using a SAS example dataset here. The file can be run as is by changing the destination path under filename.
Thank you.
dm 'log;clear;output;clear; ';
dm 'odsresults; clear';;
PROC DATASETS LIB=work NOlist MEMTYPE=data kill; /*deletes datasets in working directory*/
options nosymbolgen nomprint nomlogic; /*system options set to default*/
proc printto; run; /*ods listing will be redirected inside macro; set this to default again*/
options nonotes symbolgen mprint mlogic;
options missing = "";
filename myfile 'C:\Users\user\Desktop\RA\Mydoc.log'; /*Specify destination for output file*/
proc printto log=myfile new; run;
ods output CrossTabFreqs = Freq_ests;
proc freq data=sashelp.class;
run;
Hi:
I think that the crosstabfreqs output object only gets created if you use a TABLES statement for PROC FREQ that generates crosstabs. With no TABLES statement, then PROC FREQ is giving you one way frequencies on every variable in the file -- this is not the crosstabfreqs object, this is the onewayfreq object. Since you do not have TABLES statement that is generating, nothing is getting created.
I would at least expect to see this:
tables var1*var2;
if you want crosstabfreqs output object to be created.
Hope this helps,
Cynthia
Looks like your PROC FREQ statement doesn't produce the ODS table (crosstabfreqs) that you're requesting.
Your log probably says something like,
"WARNING: Output 'crosstabfreqs' was not created...."
If you specify only a PROC FREQ statement (without a TABLES statement), PROC FREQ produces a one-way frequency table for each variable in the most recently created data set. The doc is here. The ODS name of the one-way frequency table is OneWayFreqs (doc here).
Thank you for quick response.
Do you know why the output table is not being created?
In the code that I'm working on, I have a 'by' statement and a 'tables' statement under proc freq so I need to use crosstabsfreq.
Hi:
I think that the crosstabfreqs output object only gets created if you use a TABLES statement for PROC FREQ that generates crosstabs. With no TABLES statement, then PROC FREQ is giving you one way frequencies on every variable in the file -- this is not the crosstabfreqs object, this is the onewayfreq object. Since you do not have TABLES statement that is generating, nothing is getting created.
I would at least expect to see this:
tables var1*var2;
if you want crosstabfreqs output object to be created.
Hope this helps,
Cynthia
Thank you for the input!
I was able to figure out where I went wrong with my code.
@thewan wrote:
Thank you for quick response.
Do you know why the output table is not being created?
In the code that I'm working on, I have a 'by' statement and a 'tables' statement under proc freq so I need to use crosstabsfreq.
If you want to do a bunch of crosstabs without listing all the combinations you can use syntax like:
Proc freq data=have;
tables (var1 var2 … varn) * (othervar somethingelse andanother);
run;
If you want to run a crosstab on ALL pairs of variables
Proc freq data=have;
tables _all_*_all_;
run;
I wouldn't recommend that though as any variables with large numbers of unque values such as unique identifiers, prices, measurements like height, weight, temperature or large numbers of variables can create a lot of data.
For a reasonable example of what I mean run that example with _all_ * _all_ on the SASHELP.CLASS data set you should have access to.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.