The input format for repeated measures with two-conditions in SPSS is a little funny. In MATLAB, I would to store this data in a 3D m-by-n-by-p array where m is the number of variants across condition B, n is the number of variants across the condition in the rows, m across columns and p the number of repetitions (trials) across tubes. However, the wide format of SPSS expects repetitions to all be on the same row with flags indicating which row and column this tube corresponds to.
So if X
is your m-by-n-by-p array then create a reshaped version of X
and also create some index arrays:
sX = reshape(permute(X,[2 1 3]),size(X,1)*size(X,2),size(X,3));
srows = reshape(permute(rows,[2 1 3]),size(X,1)*size(X,2),1);
scols = reshape(permute(cols,[2 1 3]),size(X,1)*size(X,2),1);
Then you can combine these into one matrix:
SPSS = [srows scols sX];
So if your original data is:
>> X
X(:,:,1) =
111 121
211 221
311 321
X(:,:,2) =
112 122
212 222
312 322
X(:,:,3) =
113 123
213 223
313 323
X(:,:,4) =
114 124
214 224
314 324
Then this outputs:
>> SPSS
SPSS =
1 1 111 112 113 114
1 2 121 122 123 124
2 1 211 212 213 214
2 2 221 222 223 224
3 1 311 312 313 314
3 2 321 322 323 324
I guess this is a tensor equivalent of IJV format often used for sparse matrices.
Update: Here's a nasty anonymous function to convert directly:
to_spss = @(X) [reshape(permute(repmat((1:size(X,1))',[1 size(X,2)]),[2 1 3]),size(X,1)*size(X,2),1) reshape(permute(repmat((1:size(X,2)),[size(X,1) 1 1]),[2 1 3]),size(X,1)*size(X,2),1) reshape(permute(X,[2 1 3]),size(X,1)*size(X,2),size(X,3))];
Then you can just call
SPSS = to_spss(X);