MATLAB: List combinations and count how many it appears

list

I have 2 matrices, W and Y. Using both as references, I want to list the different combinations and count how many times it appears from Y. Only count Y if the correponsing W value is >0.
W =[ 25
0
0
28
0
0
25
0
0
25
0
0
15
14
0
0
25
0
0];
Y =[ 1 2 0 0
1 3 2 0
1 4 3 2
1 3 0 0
1 2 3 0
1 4 3 0
1 4 0 0
1 3 4 0
1 2 3 4
2 3 0 0
2 1 3 0
2 1 4 3
2 1 4 0
2 3 4 0
2 1 3 4
2 3 1 4
3 4 0 0
3 1 4 0
3 2 1 4];
Zlist =
[12;
13;
14;
23;
24;
34;]
Add 2 1 to 1 2; 3 1 to 1 3; 4 1 to 1 4; 3 2 to 2 3; 4 3 to 3 4 and 4 2 to 24
Also, for Y with more > 2 numbers in the row like [2 1 4], it will have a combinations of 2 1, 1 4, 2 4 while [2 3 4] has 2 3, 3 4 and 2 4.
Zlistcount =
[2;
1;
2;
2;
2;
2;]

Best Answer

YY = Y(W~=0,:);
n = sum(YY>0,2);
k = factorial(n)./factorial(n-2)/2;
ie = cumsum(k);
ib = ie - k + 1;
zc = zeros(ie(end),2);
for ii = 1:numel(ib)
zc(ib(ii):ie(ii),:) = sort(nchoosek(YY(ii,YY(ii,:)>0),2),2);
end
[i1,i2,v] = find(accumarray(zc,1));
Zlistcount = [i1,i2,v];
and without loop (as in Dpb's answer):
YY = Y(W~=0,:);
zc = sort(cell2mat(arrayfun(@(x)nchoosek(YY(x,YY(x,:)>0),2),...
(1:size(YY,1))','un',0)),2);
[i1,i2,v] = find(accumarray(zc,1));
Zlistcount = [i1,i2,v];