DATA PDI_HENRIQUE;
INPUT TRAT $@ PDI Dm;
DATALINES;
P3 0.98 4.83
P3 0.99 4.76
P3 0.99 4.77
P3 0.98 4.78
P3 0.99 4.8
P3 0.98 4.73
P3 0.98 4.79
P3 0.99 4.78
P3 0.98 4.75
P3 0.99 4.75
P5 0.99 4.84
P5 0.97 4.77
P5 0.99 4.77
And OUTPUT DATA returns with column TRAT OK, but columns PDI and Dm = .
I see two obvious errors. The first is that you don't have an end to your data step. You need a line with a semi-colon to end the lines of data. Probably if you are using SAS/Studio then SAS/Studio appended some post processing code after your code and the first semi-colon in that was used by SAS to end the data step, so that one is not causing any great harm.
The second is that you are trying to use the @ cursor movement command of the INPUT statement to move to a column defined by the value of the PDI variable, but you have not given that variable any value.
It was surprising to me to see that SAS decided that meant you wanted to move the cursor to the first column on the line. So when it tried to read a numeric value into the variable DM starting in column one of the line it didn't like the letter P that all of the lines start with.
I suspect you just need to remove the @ from the INPUT statement. Then it will read three variables. The first character (max length of 8 bytes) and two as numbers.
DATA PDI_HENRIQUE;
INPUT TRAT $ PDI Dm;
DATALINES;
P3 0.98 4.83
P3 0.99 4.76
P3 0.99 4.77
P3 0.98 4.78
P3 0.99 4.8
P3 0.98 4.73
P3 0.98 4.79
P3 0.99 4.78
P3 0.98 4.75
P3 0.99 4.75
P5 0.99 4.84
P5 0.97 4.77
P5 0.99 4.77
;
proc print;
run;
Results:
Obs TRAT PDI Dm 1 P3 0.98 4.83 2 P3 0.99 4.76 3 P3 0.99 4.77 4 P3 0.98 4.78 5 P3 0.99 4.80 6 P3 0.98 4.73 7 P3 0.98 4.79 8 P3 0.99 4.78 9 P3 0.98 4.75 10 P3 0.99 4.75 11 P5 0.99 4.84 12 P5 0.97 4.77 13 P5 0.99 4.77
I see two obvious errors. The first is that you don't have an end to your data step. You need a line with a semi-colon to end the lines of data. Probably if you are using SAS/Studio then SAS/Studio appended some post processing code after your code and the first semi-colon in that was used by SAS to end the data step, so that one is not causing any great harm.
The second is that you are trying to use the @ cursor movement command of the INPUT statement to move to a column defined by the value of the PDI variable, but you have not given that variable any value.
It was surprising to me to see that SAS decided that meant you wanted to move the cursor to the first column on the line. So when it tried to read a numeric value into the variable DM starting in column one of the line it didn't like the letter P that all of the lines start with.
I suspect you just need to remove the @ from the INPUT statement. Then it will read three variables. The first character (max length of 8 bytes) and two as numbers.
DATA PDI_HENRIQUE;
INPUT TRAT $ PDI Dm;
DATALINES;
P3 0.98 4.83
P3 0.99 4.76
P3 0.99 4.77
P3 0.98 4.78
P3 0.99 4.8
P3 0.98 4.73
P3 0.98 4.79
P3 0.99 4.78
P3 0.98 4.75
P3 0.99 4.75
P5 0.99 4.84
P5 0.97 4.77
P5 0.99 4.77
;
proc print;
run;
Results:
Obs TRAT PDI Dm 1 P3 0.98 4.83 2 P3 0.99 4.76 3 P3 0.99 4.77 4 P3 0.98 4.78 5 P3 0.99 4.80 6 P3 0.98 4.73 7 P3 0.98 4.79 8 P3 0.99 4.78 9 P3 0.98 4.75 10 P3 0.99 4.75 11 P5 0.99 4.84 12 P5 0.97 4.77 13 P5 0.99 4.77
@Tom It worked!! Thank you very much!
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Save $200 when you sign up by March 14!
What’s the difference between SAS Enterprise Guide and SAS Studio? How are they similar? Just ask SAS’ Danny Modlin.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.