Statistical programming, matrix languages, and more

A problem on vector manipulation

Reply
Occasional Contributor
Posts: 5

A problem on vector manipulation

Hi all

I have a quick question and I have been struggling for several days. I hope you could help me. Many thanks.

I hope to design a vector as follows: suppose there are two given vector a=[2 3 5], b=[1 2 3]
Here b indicates the frequency vector. I hope to generate a vector c=[2 3 3 5 5 5]. I am trying to use the repeat function in IML, but there is always something wrong

Thanks

SAS Super FREQ
Posts: 3,626

Re: A problem on vector manipulation

Use the CUSUM function to get the indexes into a long vector that has sum(b) elements. Loop over the categories and use the REPEAT functions to fill up the vector:

proc iml;

a = {2 3 5};

b = {1 2 3};

cumFreq = 0 || cusum(b);

N = ncol(a);

v = j(sum(b), 1);

do i = 1 to N;

   bIdx = 1 + cumFreq; /* begin index */

   eIdx = cumFreq[i+1];   /* end index */

   print i bIdx eIdx;

   v[bIdx:eIdx] = repeat(a, b);

end;

print v;

Occasional Contributor
Posts: 5

Re: A problem on vector manipulation

Hi Rick

     Many thanks.   This is great !    And the function cusum( ) is extremely helpful !

Ask a Question
Discussion stats
  • 2 replies
  • 266 views
  • 0 likes
  • 2 in conversation