MATLAB: Need to copy value from one matrix (short) into another matrix (long) such that it repeats multiple times

find value and repeatmultiple matricesrepeat values

I have 2 matrices of different sizes, one with one line per subject:
short_demo =
503 1 3 70
505 1 3 57
506 1 3 73
507 1 3 83
508 1 3 72
one with multiple lines per subject:
long =
503 1 26 1
503 1 26 1
503 1 26 1
503 1 26 1
503 1 26 1
503 1 26 1
503 1 26 1
503 1 26 1
503 1 26 1
503 1 26 1
505 1 26 1
505 1 26 1
505 1 26 1
505 1 26 1
505 1 26 1
505 1 26 1
505 1 26 1
505 1 26 1
505 1 26 1
505 1 26 1
506 1 28 1
506 1 28 1
506 1 28 1
506 1 28 1
506 1 28 1
506 1 28 1
506 1 28 1
506 1 28 1
506 1 28 1
506 1 28 1
507 1 25 1
507 1 25 1
507 1 25 1
507 1 25 1
507 1 25 1
507 1 25 1
507 1 25 1
507 1 25 1
507 1 25 1
507 1 25 1
508 1 30 2
508 1 30 2
508 1 30 2
508 1 30 2
508 1 30 2
508 1 30 2
508 1 30 2
508 1 30 2
508 1 30 2
508 1 30 2
if the subject ids (first column both matrices) match, then i want short_demo column 4 to fill long new column 5 as many times as the subject ids match (in this case 10, but i don't want the number hard coded).
i am having trouble with the loop structure, and how to pull the same value from short and repeat it.
i've tried:
for i=1:length(long)
cur_sub_long=long(i,1);
for ii=1:length(short_demo)
cur_sub_short=short_demo(ii,1);
if cur_sub_long==cur_sub_short
long(i,5)=short_demo(ii,4)
else long(i,5)=NaN;
end
end
end
end but it isn't giving the results i'd hoped for – it just repeats this: long =
503 1 26 1 70
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
long =
503 1 26 1 NaN
503 1 26 1 70
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
long =
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 70
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
long =
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 70
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
503 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
505 1 26 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
506 1 28 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
507 1 25 1 NaN
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
508 1 30 2 72
this is obviously the wrong approach. any ideas?

Best Answer

[~,~,c]=unique(long(:,1));
long=[long short_demo(c,4)]