Rick, Actually I would not be fond of this kind of symmetric matrix. It will be very big and cost many times when you have ten thousands of variables. I would more like to use the following data step code.

data have;
input a b c d;
cards;
0 1 1 0
1 1 0 1
1 0 1 1
0 0 1 0
;
run;
data temp;
set have;
length var1 var2 $ 40;
array x{*} _numeric_;
do i=1 to dim(x);
do j=i+1 to dim(x);
if x{i}=1 and x{j}=1 then do;
var1=vname(x{i});
var2=vname(x{j});
output;
end;
end;
end;
keep var1 var2;
run;
proc freq data=temp noprint;
tables var1*var2/out=want list ;
run;