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-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

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