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;

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


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
  • 1192 views
  • 1 like
  • 3 in conversation