## DATA Step, Macro, Functions and more

Contributor
Posts: 39

/*Hi Forum,

I am having this dataset.*/

data have;

input Income_JUN \$ count_jun percent_jun Income_MAY \$ count_may percent_may;

cards;

0 2220613 100.00 0 2211243 100.00

>0 2 0.00 >0 2 0.00

;

run;

/*I do a small calculation here*/

data have_1;

set have;

delta=((count_MAY-count_JUN)/count_jun);

DROP Income_may;

run;

/*I do a transpose (thanks Art)*/

options validvarname=any;

proc transpose data=have_1 out=want name=Income_JUN;

var count_JUN percent_JUN count_MAY percent_MAY DELTA ;

id Income_JUN;

run;

/*

The data set generated by transpose is like below*/

 Income_JUN 0 >0 count_jun 2.22061e+06 2 percent_jun 100 0 count_may 2.21124e+06 2 percent_may 100 0 delta -0.00421956 0

/*Q:

But I want the dataset like below. That means counts are '000 separated and percentages are printed with % sign with 2 decimals. Could you help.

 Income_JUN 0 >0 count_jun 2,220,613 2 percent_jun 100.00% 0.00% count_may 2,211,243 2 percent_may 100.00% 0.00% delta -0.42% 0.00%
Super User
Posts: 23,928

You need to convert them to text using PUT and the format you want.

A column can have only one type so this is the best way to do this.

Use an IF statement to check if it's count or percent based on the name and then use PUT to convert to the format you want.

sketch - not working code to get you started

``````
IF name =: "count" then new_value = put(old_value, percent8.1);``````
Super User
Posts: 10,844

```If you want a REPORT like it , I suggest to use CALL DEFINE() of PROC REPORT ,