BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
ShashankB1987
Calcite | Level 5
data WORK.All_City_Sales;
   infile datalines dsd truncover;
   input Date mmddyy10. City:$1. Units;
informat Date mmddyy10.;
format Data mmddyy10.;
 datalines;
01-01-2015	A	61
02-01-2015	A	29
03-01-2015	B       70
04-01-2015	B	35
05-01-2015	C       70
06-01-2015	C	35
07-01-2015	D	27
08-01-2015	D	28

 ;
1 ACCEPTED SOLUTION
7 REPLIES 7
ShashankB1987
Calcite | Level 5

This is part of a  bigger code and we have to be able to do this dynamically. Hence, I am trying to achieve this by macros. The dataset is just an example. So, it would very helpful if you can suggest steps to achieve this via macro. Thanks in advance.

Tom
Super User Tom
Super User

Please add some actual words to your question.

 

If you want a macro you need make some design decisions.

1) Figure out want code you want to run.  Do you just want to use a data step to write the delimited file?

2) Figure out want varies from run to run.  What options you want the user of the macro to have. What inputs they provide.

3) Figure out how to name the parameters.

4) Figure out how/when/where you are going to call the macro.

ShashankB1987
Calcite | Level 5

I am looking for a data step to write the delimited file.

Reeza
Super User

Fully worked example:


data test;
  input color $ num;
datalines;
blue 1
blue 2
blue 3
green 4
green 5
red 6
red 7
red 8
;

proc sort data=test;by color;
run;


%macro split_file(file_name=, var_split=);
data _null_;
  length fname $30.;
  set &file_name;     
  by &var_split;                                               
  if first.&var_split then count+1;
  fname=cats("/home/fkhurshed/", &var_split ,".txt");
  file dummy filevar=fname;
  put color num count;
run;

%mend;

%split_file(file_name = test, var_split = color);

Log:

 1          OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
 68         
 69         
 70         data test;
 71           input color $ num;
 72         datalines;
 
 NOTE: The data set WORK.TEST has 8 observations and 2 variables.
 NOTE: DATA statement used (Total process time):
       real time           0.00 seconds
       user cpu time       0.00 seconds
       system cpu time     0.00 seconds
       memory              546.68k
       OS Memory           23460.00k
       Timestamp           05/12/2021 05:30:35 PM
       Step Count                        24  Switch Count  2
       Page Faults                       0
       Page Reclaims                     151
       Page Swaps                        0
       Voluntary Context Switches        9
       Involuntary Context Switches      0
       Block Input Operations            0
       Block Output Operations           264
       
 81         ;
 
 82         
 83         proc sort data=test;by color;
 84         run;
 
 NOTE: There were 8 observations read from the data set WORK.TEST.
 NOTE: The data set WORK.TEST has 8 observations and 2 variables.
 NOTE: PROCEDURE SORT used (Total process time):
       real time           0.00 seconds
       user cpu time       0.00 seconds
       system cpu time     0.00 seconds
       memory              824.03k
       OS Memory           23720.00k
       Timestamp           05/12/2021 05:30:35 PM
       Step Count                        25  Switch Count  2
       Page Faults                       0
       Page Reclaims                     207
       Page Swaps                        0
       Voluntary Context Switches        9
       Involuntary Context Switches      0
       Block Input Operations            0
       Block Output Operations           264
       
 
 85         
 86         
 87         %macro split_file(file_name=, var_split=);
 88         data _null_;
 89           length fname $30.;
 90           set &file_name;
 91           by &var_split;
 92           if first.&var_split then count+1;
 93           fname=cats("/home/fkhurshed/", &var_split ,".txt");
 94           file dummy filevar=fname;
 95           put color num count;
 96         run;
 97         
 98         %mend;
 99         
 100        %split_file(file_name = test, var_split = color);
 
 NOTE: The file DUMMY is:
       Filename=/home/fkhurshed/blue.txt,
       Owner Name=fkhurshed,Group Name=oda,
       Access Permission=-rw-r--r--,
       Last Modified=12May2021:11:30:35
 
 NOTE: The file DUMMY is:
       Filename=/home/fkhurshed/green.txt,
       Owner Name=fkhurshed,Group Name=oda,
       Access Permission=-rw-r--r--,
       Last Modified=12May2021:11:30:35
 
 NOTE: The file DUMMY is:
       Filename=/home/fkhurshed/red.txt,
       Owner Name=fkhurshed,Group Name=oda,
       Access Permission=-rw-r--r--,
       Last Modified=12May2021:11:30:35
 
 NOTE: 3 records were written to the file DUMMY.
       The minimum record length was 8.
       The maximum record length was 8.
 NOTE: 2 records were written to the file DUMMY.
       The minimum record length was 9.
       The maximum record length was 9.
 NOTE: 3 records were written to the file DUMMY.
       The minimum record length was 7.
       The maximum record length was 7.
 NOTE: There were 8 observations read from the data set WORK.TEST.
 NOTE: DATA statement used (Total process time):
       real time           0.02 seconds
       user cpu time       0.01 seconds
       system cpu time     0.00 seconds
       memory              614.25k
       OS Memory           23716.00k
       Timestamp           05/12/2021 05:30:35 PM
       Step Count                        26  Switch Count  0
       Page Faults                       0
       Page Reclaims                     141
       Page Swaps                        0
       Voluntary Context Switches        17
       Involuntary Context Switches      0
       Block Input Operations            0
       Block Output Operations           32
       

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 7 replies
  • 583 views
  • 2 likes
  • 4 in conversation