BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
vinod4842
Fluorite | Level 6

data ds;
infile datalines ;
input id 5. name&$20. age 3. sex$7. sal 5.;
datalines;
1002 sarvesh ranjani 30 male 32000
1006 radhe govinda swamy 30 female 30000
1047 yagna prajna shohel 52 male 32200
1098 keerthana gowsami 32 female 12000
;
run;

data ds;
infile datalines ;
input id 5. name&$20. age 3. sex$7. sal 5.;
datalines;
1002 sarvesh ranjani     30  male   32000
1006 radhe govinda swamy 30  female 30000
1047 yagna prajna shohel 52  male   32200
1098 keerthana gowsami   32  female 12000
;
run;

171 data ds;
172 infile datalines ;
173 input id 5. name&$20. age 3. sex$7. sal 5.;
174 datalines;

NOTE: Invalid data for sal in line 175 33-37.
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+---
175 1002 sarvesh ranjani 30 male 32000
id=1002 name=sarvesh ranjani age=. sex=30 mal sal=. _ERROR_=1 _N_=1
NOTE: Invalid data for age in line 176 30-32.
176 1006 radhe govinda swamy 30 female 30000
id=1006 name=radhe govinda swamy age=. sex=ale 300 sal=0 _ERROR_=1 _N_=2
NOTE: Invalid data for age in line 177 30-32.
177 1047 yagna prajna shohel 52 male 32200
id=1047 name=yagna prajna shohel age=. sex=e 322 sal=0 _ERROR_=1 _N_=3
NOTE: Invalid data for sal in line 178 35-39.
178 1098 keerthana gowsami 32 female 12000
id=1098 name=keerthana gowsami age=32 sex=femal sal=. _ERROR_=1 _N_=4
NOTE: The data set WORK.DS has 4 observations and 5 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds


179 ;
180 run;

 

1 ACCEPTED SOLUTION

Accepted Solutions
Tom
Super User Tom
Super User

That is because you used the & modifier.  That instructs SAS to stop when it sees two or more spaces.  

So on the first line

  172 infile datalines ;
  173 input id 5. name&$20. age 3. sex$7. sal 5.;
NOTE: Invalid data for sal in line 175 33-37.
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6
  175 1002 sarvesh ranjani      30 male 32000
id=1002 name=sarvesh ranjani age=. sex=30 mal sal=.

It starts to read the last three fields at 23 instead of column 26. 

So it reads columns 23-25 into AGE and since they are blank it sets AGE to missing.

It then reads columns 26-32 into SEX so SEX is set to '30 mal' , since the $7. informat will left align the value.

When it tries to read SAL it sees 'e 320' which is not a valid number.

 

View solution in original post

3 REPLIES 3
Astounding
PROC Star

You've selected a style of INPUT which is overly complex for the data that you are reading.  Why not just use a straightforward statement?

 

input  id 1-4  name $ 6-25  age 26-27  sex $ 30-35  sal 37-41;

Tom
Super User Tom
Super User

That is because you used the & modifier.  That instructs SAS to stop when it sees two or more spaces.  

So on the first line

  172 infile datalines ;
  173 input id 5. name&$20. age 3. sex$7. sal 5.;
NOTE: Invalid data for sal in line 175 33-37.
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6
  175 1002 sarvesh ranjani      30 male 32000
id=1002 name=sarvesh ranjani age=. sex=30 mal sal=.

It starts to read the last three fields at 23 instead of column 26. 

So it reads columns 23-25 into AGE and since they are blank it sets AGE to missing.

It then reads columns 26-32 into SEX so SEX is set to '30 mal' , since the $7. informat will left align the value.

When it tries to read SAL it sees 'e 320' which is not a valid number.

 

vinod4842
Fluorite | Level 6

NOW WHAT IS CORRECT PROGRAM FOR THAT

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

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
  • 3 replies
  • 894 views
  • 0 likes
  • 3 in conversation