<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic convert data from improperly data format in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71561#M20658</link>
    <description>Hello All,&lt;BR /&gt;
&lt;BR /&gt;
I have an unfriendly data format (the file has same info in a row and has empty lines). I tried to convert it into a usable data. Please read and advise how I could make it work. At this time, I couldn't import the data in and not sure how to skip the blank line to continue reading next line. Thanks for your time and Happy Friday to All.&lt;BR /&gt;
&lt;BR /&gt;
My data (test.csv) looks like: &lt;BR /&gt;
&lt;BR /&gt;
Company_NameA,Company_NameB,Company_NameC&lt;BR /&gt;
Attn_NameA,Attn_NameB,Attn_NameC&lt;BR /&gt;
AddressA,AddressB,AddressC&lt;BR /&gt;
&lt;BR /&gt;
Company_NameD,Company_NameE,Company_NameF&lt;BR /&gt;
Attn_NameD,Attn_NameE,Attn_NameF&lt;BR /&gt;
AddressD,AddressE,AddressF&lt;BR /&gt;
&lt;BR /&gt;
Company_NameG,Company_NameH,Company_NameK&lt;BR /&gt;
Attn_NameG,Attn_NameH,Attn_NameK&lt;BR /&gt;
AddressG,AddressH,AddressK&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
I'd like to convert it into a data set:&lt;BR /&gt;
&lt;BR /&gt;
Company_NameA	Attn_NameA	AddressA&lt;BR /&gt;
Company_NameB	Attn_NameB	AddressB&lt;BR /&gt;
Company_NameC	Attn_NameC	AddressC&lt;BR /&gt;
Company_NameD	Attn_NameD	AddressD&lt;BR /&gt;
Company_NameE	Attn_NameE	AddressE&lt;BR /&gt;
Company_NameF	Attn_NameF	AddressF&lt;BR /&gt;
Company_NameG	Attn_NameG	AddressG&lt;BR /&gt;
Company_NameH	Attn_NameH	AddressH&lt;BR /&gt;
Company_NameK	Attn_NameK	AddressK&lt;BR /&gt;
&lt;BR /&gt;
My intention is to create 3 tables for company, attn_name, and address.&lt;BR /&gt;
Also, I use a keyid for merging them later.&lt;BR /&gt;
&lt;BR /&gt;
data company (keep=keyid comp_name)&lt;BR /&gt;
       attn (keep=keyid attn_name)&lt;BR /&gt;
       address (keep=keyid address);&lt;BR /&gt;
	  &lt;BR /&gt;
	 attrib keyid	length=$5.;&lt;BR /&gt;
	 array comp_name[3] $50 comp_name1-comp_name3;&lt;BR /&gt;
	 array attn_name[3] $50 attn1-attn3;&lt;BR /&gt;
	 array address[3] $50 address1-address3;&lt;BR /&gt;
			&lt;BR /&gt;
infile "C:\data\test.csv" dsd dlm=",";&lt;BR /&gt;
	input @1 inrec $char256;&lt;BR /&gt;
	if length(inrec)&amp;gt;0 then do; *** if no empty row;&lt;BR /&gt;
		rec+1;&lt;BR /&gt;
		keyid=put(rec,z5.);&lt;BR /&gt;
		do i=1 to 3;&lt;BR /&gt;
                        comp_name&lt;I&gt; = scan(inrec,i,',');&lt;BR /&gt;
			output company;&lt;BR /&gt;
			attn_name&lt;I&gt; = scan(inrec,i,',');&lt;BR /&gt;
			output attn;&lt;BR /&gt;
			address&lt;I&gt; = scan(inrec,i,',');&lt;BR /&gt;
                        output address;&lt;BR /&gt;
		end;&lt;BR /&gt;
	else &lt;SOME codes="" here="" how="" to="" skip="" the="" blank="" line="" and="" continue=""&gt;		&lt;BR /&gt;
		&lt;BR /&gt;
	end;&lt;BR /&gt;
 run;&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
***** log file *****&lt;BR /&gt;
NOTE: Invalid data for char256 in line 10 12-21.&lt;BR /&gt;
10        Attn_NameG,Attn_NameH,Attn_NameK 32&lt;BR /&gt;
keyid=00008 comp_name1=Attn_Nam comp_name2=  comp_name3=  attn1=Attn_Nam attn2=  attn3=&lt;BR /&gt;
address1=Attn_Nam address2=  address3=  inrec=Attn_Nam char256=. rec=8 i=4 _ERROR_=1 _N_=8&lt;BR /&gt;
NOTE: Invalid data for char256 in line 11 10-17.&lt;BR /&gt;
11        AddressG,AddressH,AddressK 26&lt;BR /&gt;
keyid=00009 comp_name1=AddressG comp_name2=  comp_name3=  attn1=AddressG attn2=  attn3=&lt;BR /&gt;
address1=AddressG address2=  address3=  inrec=AddressG char256=. rec=9 i=4 _ERROR_=1 _N_=9&lt;BR /&gt;
NOTE: 11 records were read from the infile "C:\data\test.csv".&lt;BR /&gt;
      The minimum record length was 0.&lt;BR /&gt;
      The maximum record length was 41.&lt;BR /&gt;
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.&lt;BR /&gt;
NOTE: The data set WORK.COMPANY has 27 observations and 1 variables.&lt;BR /&gt;
NOTE: The data set WORK.ATTN has 27 observations and 1 variables.&lt;BR /&gt;
NOTE: The data set WORK.ADDRESS has 0 observations and 1 variables.&lt;BR /&gt;
NOTE: DATA statement used (Total process time):&lt;BR /&gt;
      real time           0.04 seconds&lt;BR /&gt;
      cpu time            0.04 seconds&lt;/SOME&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;</description>
    <pubDate>Fri, 26 Mar 2010 17:54:42 GMT</pubDate>
    <dc:creator>Lani</dc:creator>
    <dc:date>2010-03-26T17:54:42Z</dc:date>
    <item>
      <title>convert data from improperly data format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71561#M20658</link>
      <description>Hello All,&lt;BR /&gt;
&lt;BR /&gt;
I have an unfriendly data format (the file has same info in a row and has empty lines). I tried to convert it into a usable data. Please read and advise how I could make it work. At this time, I couldn't import the data in and not sure how to skip the blank line to continue reading next line. Thanks for your time and Happy Friday to All.&lt;BR /&gt;
&lt;BR /&gt;
My data (test.csv) looks like: &lt;BR /&gt;
&lt;BR /&gt;
Company_NameA,Company_NameB,Company_NameC&lt;BR /&gt;
Attn_NameA,Attn_NameB,Attn_NameC&lt;BR /&gt;
AddressA,AddressB,AddressC&lt;BR /&gt;
&lt;BR /&gt;
Company_NameD,Company_NameE,Company_NameF&lt;BR /&gt;
Attn_NameD,Attn_NameE,Attn_NameF&lt;BR /&gt;
AddressD,AddressE,AddressF&lt;BR /&gt;
&lt;BR /&gt;
Company_NameG,Company_NameH,Company_NameK&lt;BR /&gt;
Attn_NameG,Attn_NameH,Attn_NameK&lt;BR /&gt;
AddressG,AddressH,AddressK&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
I'd like to convert it into a data set:&lt;BR /&gt;
&lt;BR /&gt;
Company_NameA	Attn_NameA	AddressA&lt;BR /&gt;
Company_NameB	Attn_NameB	AddressB&lt;BR /&gt;
Company_NameC	Attn_NameC	AddressC&lt;BR /&gt;
Company_NameD	Attn_NameD	AddressD&lt;BR /&gt;
Company_NameE	Attn_NameE	AddressE&lt;BR /&gt;
Company_NameF	Attn_NameF	AddressF&lt;BR /&gt;
Company_NameG	Attn_NameG	AddressG&lt;BR /&gt;
Company_NameH	Attn_NameH	AddressH&lt;BR /&gt;
Company_NameK	Attn_NameK	AddressK&lt;BR /&gt;
&lt;BR /&gt;
My intention is to create 3 tables for company, attn_name, and address.&lt;BR /&gt;
Also, I use a keyid for merging them later.&lt;BR /&gt;
&lt;BR /&gt;
data company (keep=keyid comp_name)&lt;BR /&gt;
       attn (keep=keyid attn_name)&lt;BR /&gt;
       address (keep=keyid address);&lt;BR /&gt;
	  &lt;BR /&gt;
	 attrib keyid	length=$5.;&lt;BR /&gt;
	 array comp_name[3] $50 comp_name1-comp_name3;&lt;BR /&gt;
	 array attn_name[3] $50 attn1-attn3;&lt;BR /&gt;
	 array address[3] $50 address1-address3;&lt;BR /&gt;
			&lt;BR /&gt;
infile "C:\data\test.csv" dsd dlm=",";&lt;BR /&gt;
	input @1 inrec $char256;&lt;BR /&gt;
	if length(inrec)&amp;gt;0 then do; *** if no empty row;&lt;BR /&gt;
		rec+1;&lt;BR /&gt;
		keyid=put(rec,z5.);&lt;BR /&gt;
		do i=1 to 3;&lt;BR /&gt;
                        comp_name&lt;I&gt; = scan(inrec,i,',');&lt;BR /&gt;
			output company;&lt;BR /&gt;
			attn_name&lt;I&gt; = scan(inrec,i,',');&lt;BR /&gt;
			output attn;&lt;BR /&gt;
			address&lt;I&gt; = scan(inrec,i,',');&lt;BR /&gt;
                        output address;&lt;BR /&gt;
		end;&lt;BR /&gt;
	else &lt;SOME codes="" here="" how="" to="" skip="" the="" blank="" line="" and="" continue=""&gt;		&lt;BR /&gt;
		&lt;BR /&gt;
	end;&lt;BR /&gt;
 run;&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
***** log file *****&lt;BR /&gt;
NOTE: Invalid data for char256 in line 10 12-21.&lt;BR /&gt;
10        Attn_NameG,Attn_NameH,Attn_NameK 32&lt;BR /&gt;
keyid=00008 comp_name1=Attn_Nam comp_name2=  comp_name3=  attn1=Attn_Nam attn2=  attn3=&lt;BR /&gt;
address1=Attn_Nam address2=  address3=  inrec=Attn_Nam char256=. rec=8 i=4 _ERROR_=1 _N_=8&lt;BR /&gt;
NOTE: Invalid data for char256 in line 11 10-17.&lt;BR /&gt;
11        AddressG,AddressH,AddressK 26&lt;BR /&gt;
keyid=00009 comp_name1=AddressG comp_name2=  comp_name3=  attn1=AddressG attn2=  attn3=&lt;BR /&gt;
address1=AddressG address2=  address3=  inrec=AddressG char256=. rec=9 i=4 _ERROR_=1 _N_=9&lt;BR /&gt;
NOTE: 11 records were read from the infile "C:\data\test.csv".&lt;BR /&gt;
      The minimum record length was 0.&lt;BR /&gt;
      The maximum record length was 41.&lt;BR /&gt;
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.&lt;BR /&gt;
NOTE: The data set WORK.COMPANY has 27 observations and 1 variables.&lt;BR /&gt;
NOTE: The data set WORK.ATTN has 27 observations and 1 variables.&lt;BR /&gt;
NOTE: The data set WORK.ADDRESS has 0 observations and 1 variables.&lt;BR /&gt;
NOTE: DATA statement used (Total process time):&lt;BR /&gt;
      real time           0.04 seconds&lt;BR /&gt;
      cpu time            0.04 seconds&lt;/SOME&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;</description>
      <pubDate>Fri, 26 Mar 2010 17:54:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71561#M20658</guid>
      <dc:creator>Lani</dc:creator>
      <dc:date>2010-03-26T17:54:42Z</dc:date>
    </item>
    <item>
      <title>Re: convert data from improperly data format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71562#M20659</link>
      <description>See what you think about this....&lt;BR /&gt;
&lt;BR /&gt;
[pre]&lt;BR /&gt;
filename FT15F001 temp;&lt;BR /&gt;
data comp(keep=Company attn_name address);&lt;BR /&gt;
   infile FT15F001 dsd eof=eof;&lt;BR /&gt;
   array comp[3] $50;&lt;BR /&gt;
   array attn[3] $50;&lt;BR /&gt;
   array addr[3] $50;&lt;BR /&gt;
   input #1 comp&lt;LI&gt; #2 attn&lt;/LI&gt;&lt;LI&gt; #3 addr&lt;/LI&gt;&lt;LI&gt;;&lt;BR /&gt;
   do i = 1 to dim(comp);&lt;BR /&gt;
      company   = comp[ i ];&lt;BR /&gt;
      attn_name = attn[ i ];&lt;BR /&gt;
      address   = addr[ i ];&lt;BR /&gt;
      output;&lt;BR /&gt;
      end;&lt;BR /&gt;
   input;&lt;BR /&gt;
   return;&lt;BR /&gt;
 eof:&lt;BR /&gt;
   stop;&lt;BR /&gt;
   parmcards;&lt;BR /&gt;
Company_NameA,Company_NameB,Company_NameC&lt;BR /&gt;
Attn_NameA,Attn_NameB,Attn_NameC&lt;BR /&gt;
AddressA,AddressB,AddressC&lt;BR /&gt;
&lt;BR /&gt;
Company_NameD,Company_NameE,Company_NameF&lt;BR /&gt;
Attn_NameD,Attn_NameE,Attn_NameF&lt;BR /&gt;
AddressD,AddressE,AddressF&lt;BR /&gt;
&lt;BR /&gt;
Company_NameG,Company_NameH,Company_NameK&lt;BR /&gt;
Attn_NameG,Attn_NameH,Attn_NameK&lt;BR /&gt;
AddressG,AddressH,AddressK&lt;BR /&gt;
;;;;&lt;BR /&gt;
   run;&lt;BR /&gt;
proc print;&lt;BR /&gt;
   run;&lt;BR /&gt;
[/pre]

Message was edited by: data _null_;&lt;/LI&gt;</description>
      <pubDate>Fri, 26 Mar 2010 18:25:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71562#M20659</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2010-03-26T18:25:10Z</dc:date>
    </item>
    <item>
      <title>Re: convert data from improperly data format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71563#M20660</link>
      <description>Hi data _null_,&lt;BR /&gt;
&lt;BR /&gt;
Thanks for your kind response. I put your codes in to test and I got the followings:&lt;BR /&gt;
&lt;BR /&gt;
1274  filename FT15F001 temp;&lt;BR /&gt;
1275  data comp(keep=company attn_name address);&lt;BR /&gt;
1276      infile FT15F001 dsd eof=eof;&lt;BR /&gt;
1277      array comp[3] $50;&lt;BR /&gt;
1278      array attn[3] $50;&lt;BR /&gt;
1279      array addr[3] $50;&lt;BR /&gt;
1280      input #1 comp&lt;LI&gt; #2 attn&lt;/LI&gt;&lt;LI&gt; #3 addr&lt;/LI&gt;&lt;LI&gt;;&lt;BR /&gt;
1281      do i=1 to dim(comp);&lt;BR /&gt;
1282          company   = comp;&lt;BR /&gt;
ERROR: Illegal reference to the array comp.&lt;BR /&gt;
1283          attn_name = attn;&lt;BR /&gt;
ERROR: Illegal reference to the array attn.&lt;BR /&gt;
1284          address   = addr;&lt;BR /&gt;
ERROR: Illegal reference to the array addr.&lt;BR /&gt;
1285          output;&lt;BR /&gt;
1286          end;&lt;BR /&gt;
1287      input;&lt;BR /&gt;
1288      return;&lt;BR /&gt;
1289  eof:&lt;BR /&gt;
1290      stop;&lt;BR /&gt;
1291      parmcards;&lt;BR /&gt;
1301  ;;;;&lt;BR /&gt;
&lt;BR /&gt;
NOTE: The SAS System stopped processing this step because of errors.&lt;BR /&gt;
WARNING: The data set WORK.COMP may be incomplete.  When this step was stopped there were 0&lt;BR /&gt;
         observations and 3 variables.&lt;BR /&gt;
WARNING: Data set WORK.COMP was not replaced because this step was stopped.&lt;BR /&gt;
NOTE: DATA statement used (Total process time):&lt;BR /&gt;
      real time           0.01 seconds&lt;BR /&gt;
      cpu time            0.00 seconds&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
1302  run;&lt;BR /&gt;
1303  proc print;&lt;BR /&gt;
1304  run;&lt;BR /&gt;
&lt;BR /&gt;
NOTE: No observations in data set WORK.COMP.&lt;BR /&gt;
NOTE: PROCEDURE PRINT used (Total process time):&lt;BR /&gt;
      real time           0.00 seconds&lt;BR /&gt;
      cpu time            0.00 seconds&lt;/LI&gt;</description>
      <pubDate>Fri, 26 Mar 2010 20:04:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71563#M20660</guid>
      <dc:creator>Lani</dc:creator>
      <dc:date>2010-03-26T20:04:22Z</dc:date>
    </item>
    <item>
      <title>Re: convert data from improperly data format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71564#M20661</link>
      <description>I wondered why some of the post got italized.  The square bracked I.  I looked but did not see the problem.  I change the program to use _N_ for array index.&lt;BR /&gt;
&lt;BR /&gt;
[pre]&lt;BR /&gt;
filename FT15F001 temp;&lt;BR /&gt;
data comp(keep=Company attn_name address);&lt;BR /&gt;
   infile FT15F001 dsd eof=eof;&lt;BR /&gt;
   array comp[3] $50;&lt;BR /&gt;
   array attn[3] $50;&lt;BR /&gt;
   array addr[3] $50;&lt;BR /&gt;
   input #1 comp&lt;LI&gt; #2 attn&lt;/LI&gt;&lt;LI&gt; #3 addr&lt;/LI&gt;&lt;LI&gt;;&lt;BR /&gt;
   do _n_ = 1 to dim(comp);&lt;BR /&gt;
      company   = comp[_n_];&lt;BR /&gt;
      attn_name = attn[_n_];&lt;BR /&gt;
      address   = addr[_n_];&lt;BR /&gt;
      output;&lt;BR /&gt;
      end;&lt;BR /&gt;
   input;&lt;BR /&gt;
   return;&lt;BR /&gt;
 eof:&lt;BR /&gt;
   stop;&lt;BR /&gt;
   parmcards;&lt;BR /&gt;
Company_NameA,Company_NameB,Company_NameC&lt;BR /&gt;
Attn_NameA,Attn_NameB,Attn_NameC&lt;BR /&gt;
AddressA,AddressB,AddressC&lt;BR /&gt;
 &lt;BR /&gt;
Company_NameD,Company_NameE,Company_NameF&lt;BR /&gt;
Attn_NameD,Attn_NameE,Attn_NameF&lt;BR /&gt;
AddressD,AddressE,AddressF&lt;BR /&gt;
 &lt;BR /&gt;
Company_NameG,Company_NameH,Company_NameK&lt;BR /&gt;
Attn_NameG,Attn_NameH,Attn_NameK&lt;BR /&gt;
AddressG,AddressH,AddressK&lt;BR /&gt;
;;;;&lt;BR /&gt;
   run;&lt;BR /&gt;
proc print;&lt;BR /&gt;
   run;&lt;BR /&gt;
[/pre]

Added space to blank lines in data to get them to display in the post.&lt;BR /&gt;
&lt;BR /&gt;
    &lt;BR /&gt;
Message was edited by: data _null_;&lt;/LI&gt;</description>
      <pubDate>Fri, 26 Mar 2010 20:16:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71564#M20661</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2010-03-26T20:16:37Z</dc:date>
    </item>
    <item>
      <title>Re: convert data from improperly data format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71565#M20662</link>
      <description>data _null_, &lt;BR /&gt;
&lt;BR /&gt;
Thank you very much!</description>
      <pubDate>Fri, 26 Mar 2010 20:46:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/convert-data-from-improperly-data-format/m-p/71565#M20662</guid>
      <dc:creator>Lani</dc:creator>
      <dc:date>2010-03-26T20:46:36Z</dc:date>
    </item>
  </channel>
</rss>

