You use ODS OUTPUT to create data sets containing the results shown in the results.
Then you manipulate the data set for custom reports and use another report procedure like Proc Print, Report or Tabulate to show the results.
The bit that you need is to know the name of the object(s) created by your code. That is accomplished by placing ODS Trace statements around the procedure:
ODS Trace on;
<procedure creating output>
ods trace off;
The Log will show something like:
Output Added:
-------------
Name: Summary
Label: Data Summary
Template: Stat.SurveyFreq.Summary
Path: Surveyfreq.Summary
-------------
Output Added:
-------------
Name: CrossTabs
Label: CrossTabulation Table
Template: Stat.SurveyFreq.CrossTabFreqs
Path: Surveyfreq.Table1.CrossTabs
-------------
The piece you need is the NAME. These generally appear in the order of the results.
So once you know the name of the object(s) you want then you add them to ODS output in the proc code such as:
Proc surveyfreq data=work.ocd;
table dsm_OCD*(Contamination_OC Harming_OC Ordering_OC Hoarding_OC
Sex_rel_mor_OC Any_OC One_OC Two_OC Three_OC Four_OC
Five_OC)/nowt;
weight finalp2wt;
ods output crosstabs=mydataset;
run;
This creates a data set name Mydataset with all of the crosstab results. If you have tests they would have results in different objects.
Since I don't have your data I can't see what you might mean by "both variables have a value of 1".
The output data set will have a variable TABLE that has the variables used to create the given observation. The values of the Variables will be there plus another variable named F_<your variable> that contains the formatted value of the variable in text. The variable Frequency has the N value, Percent the % and StdErr.
Note that the total values appear so check the Formatted value of the variable for the word Total to identify such.