BookmarkSubscribeRSS Feed
venkatnaveen
Obsidian | Level 7

Hi frnds...
I have a problem that could be a simple one.
In a dataset I have two variables id and spend
like
data a;
input id spend;
cards;
1 100
1 200
1 300
2 150
2 690
;
run;

I want output like

id jan feb mar
1 100 200 300
2 150 690 .

through arrays

2 REPLIES 2
art297
Opal | Level 21

already answered this exact same question earlier this morning:

data have;

input id spend;

cards;

1 100

1 200

1 300

2 150

2 690

;

run;

data want;

set have;

by id;

array x{*} jan feb mar;

retain jan feb mar     ;

if first.id then do;n=0;call missing(of x{*});end;

n+1;

x{n}=spend;

if last.id;

drop n spend;

run;

data_null__
Jade | Level 19

This is a good problem to show how we can apply DO UNTIL(LAST DOT to "simplify" the code.

data have;
   input id spend;
   cards;
1 100
1 200
1 300
2 150
2 690
;;;;
   run;
data m(drop=spend);
   do _n_ = 1 by 1 until(last.id);
      set have;
      by id;
      array m[3] jan feb mar;
      m[_n_] = spend;
     
end;
  
run;
proc print;
  
run;

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to connect to databases in SAS Viya

Need to connect to databases in SAS Viya? SAS’ David Ghan shows you two methods – via SAS/ACCESS LIBNAME and SAS Data Connector SASLIBS – in this video.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 2 replies
  • 1447 views
  • 1 like
  • 3 in conversation