Prev: Convert Excel file created with tagsets.excelxp to xls/xlsx
Next: sas functions similar to STATA "anycount"
From: Justin on 27 Oct 2009 12:13 Hi i have a flat file with multiple lines per logical record. i am tring to use a data step infile to create the dataset from the file. i have defined an array of size N to hold <= N lines. if there is a logical record with N+1 lines, the data step stops processing the rest of the other records follow after this logical record. Reason being the array is out of range. i have tried various error handling methods from the online manual but i am still not able to force the data step to continue processing the next record. i am not sure how i can overcome this in data step. the logic using a programming tool is : /*---------- Start -----------------*/ Open infile Read ID While ID has not changed, let array(N) = input line, N+1 if error, print ID + Error reason. /*------------ End ---------------*/ Thank you in advance for any help. best regards Justin
From: Tom Abernathy on 28 Oct 2009 01:33
Justin - Examples help. If you describe your desired data in terms of variables ( or columns or fields) and observations (or rows) rather than as arrays then you will have an easier time mapping those terms into SAS code and SAS datasets. If your input was always N lines per observation and fixed format then use the # pointer on your INPUT statement. data new; For example if you had 2 lines of text per observation you could use code like: infile 'rawfile.txt'; input #1 id 1-5 name $ 6-40 #2 age 6-8 ; run; But you seem to be describing an input file where each observation could have a varying number of rows. Usually there are values on the lines that help you identify when a new observation (subject, sample or whatever your unit of analysis is) has started. What you can do is take advantage of the @ and/or @@ syntax on the end of your INPUT statement to "hold" onto the line so that you can read more. - Tom Abernathy On Oct 27, 12:13 pm, Justin <justy...(a)hotmail.com> wrote: > Hi > > i have a flat file with multiple lines per logical record. > > i am tring to use a data step infile to create the dataset from the > file. > i have defined an array of size N to hold <= N lines. > if there is a logical record with N+1 lines, the data step stops > processing the rest > of the other records follow after this logical record. Reason being > the array is out of range. > > i have tried various error handling methods from the online manual but > i am still not able to > force the data step to continue processing the next record. > > i am not sure how i can overcome this in data step. the logic using a > programming tool is : > > /*---------- Start -----------------*/ > Open infile > Read ID > While ID has not changed, let array(N) = input line, N+1 > > if error, print ID + Error reason. > /*------------ End ---------------*/ > > Thank you in advance for any help. > best regards > > Justin |