<?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 Re: Merging Obervations in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412711#M279889</link>
    <description>&lt;P&gt;I think you're going about this in a difficult way.&amp;nbsp; There should be no need to assign a length or informat of $132 to every variable. In the example below, I've assigned an INFORMAT specific to each variable.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And you can use a naked INPUT statement to populate the _INFILE_ automatic variable.&amp;nbsp; It has a trailing @, for re-reading purposes.&amp;nbsp; Items 1 and 2 below is&amp;nbsp; a bit like your&amp;nbsp; logic, but the rest basically does conditional reading of subgroups of variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;if the line is blank, or characters 2 through 9 contain '&amp;nbsp; NAME&amp;nbsp; ','--NODE--', or '--------' then delete the input record&lt;/LI&gt;
&lt;LI&gt;If the input line has the string "DATASET NAME:" then input @ 'DATASET NAME:' DSNAME;&amp;nbsp;&amp;nbsp; Then delete the input record&lt;/LI&gt;
&lt;LI&gt;If it otherwise has non-blanks in characters 1-9, read NODE&lt;/LI&gt;
&lt;LI&gt;If it has non-blanks in characters 1-20, read INTDATE,&amp;nbsp; INTFROM, INTFOR&lt;/LI&gt;
&lt;LI&gt;Then read all the HELD... and HOLDER... variables.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  infile 'c:\temp\t.txt' firstobs=2 truncover;

  informat dsname $40.  node $8. intdate $5. intfrom hhmmss8. intfor stimer6.
       HeldNAME $8. HeldNUM 5.0 HeldDate $5. HeldTIME time8.0 HeldJESID $8.           
       HeldFROM time8.0 HeldFOR stimer6. HeldF HeldS HeldC $1.                      
       HolderNAME $8. HolderT $1. HolderJESID $8. HolderH $1. HolderAT time8.0
  ;
  retain dsname  -- intfor;
  input @;
  if _infile_=' ' then delete;
  else if substr(_infile_,2,8) in ('--NODE--','  NAME  ','--------') then delete;

  else if _infile_=: ' DATASET NAME:' then do;
   call missing (of dsname--intfor);
   input @'DATASET NAME:' dsname $40.;
   delete;
  end;

  if not (_infile_=:'         ') then input @2 node @;
  if not (_infile_=:'                    ') then input intdate intfrom intfor @;
  input heldname--holderat;

  format intfrom time8.0 intfor mmss5.0
         heldtime time8.0 heldfrom time8.0 heldfor mmss5.0
         holderat time8.0;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Notes:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;I use trailing @ signs, to hold the _INFILE_ variable for re-reading.&amp;nbsp; This allows the conditional reading of variables, depending on the structure of the data line.&lt;/LI&gt;
&lt;LI&gt;Because an obs is constructed from a variable number of lines, there is a retain statement for all the variables that are not read in with every data line (i.e.&amp;nbsp; dsname--intfor).&lt;/LI&gt;
&lt;LI&gt;Because of the retain statement, there is a call missing(of dsname--intfor) every time a new dataset name is encountered.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you really want a CSV file, then set up a FILE statement and a PUT statement at the bottom of the data step. Also you can change DATA WANT to DATA _NULL_.&lt;/P&gt;</description>
    <pubDate>Sun, 12 Nov 2017 18:33:21 GMT</pubDate>
    <dc:creator>mkeintz</dc:creator>
    <dc:date>2017-11-12T18:33:21Z</dc:date>
    <item>
      <title>Merging Obervations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412699#M279886</link>
      <description>&lt;P&gt;I'm parsing data from a txt file and formatting into a csv. Part of that, is to combine multiple observations into a single row. There is no common identifier between the two rows, so I'm trying to use the difference in the number of fields present(&lt;A href="https://communities.sas.com/t5/General-SAS-Programming/Merging-observations-into-a-single-one/m-p/410695#M51507" target="_blank"&gt;https://communities.sas.com/t5/General-SAS-Programming/Merging-observations-into-a-single-one/m-p/410695#M51507&lt;/A&gt; )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Some of the lines I'm looking to output, have some of their fields missing(those prefixed with NODE or INT in my code). Which is fine, as I don't need them for the final csv file, but I can't seem to work around how to handle that missing data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If both NODE and the INT fields are missing, it returns data, however if just NODE is missing, that line doesn't get returned.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Its also truncating the leading spaces caused by these missing fields, throwing my other fields out of whack. I've tried using $CHAR132; in my length statement, but get his error –&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ERROR 391-185: Expecting a variable length specification.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ERROR 202-322: The option or parameter is not recognized and will be ignored.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ultimately my output csv should look like –&lt;/P&gt;&lt;P&gt;Dataset, &amp;nbsp;HeldNAME, HeldNUM, HeldDate, HeldTIME, HeldJESID, HeldFROM, HeldFOR, HolderNAME, HolderJESID, HolderAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With the Dataset value being the third value(i.e. the ??? in this example) on the line that begins with "DATASET &amp;nbsp;NAME:&amp;nbsp; &amp;nbsp;???"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is where I'm at thus far -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data File1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
retain dataset;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
infile IFILE missover;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
length NODE IntDATE IntFROM IntFOR &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HeldNAME HeldNUM HeldDate HeldTIME HeldJESID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HeldFROM HeldFOR HeldF HeldS HeldC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HolderNAME HolderT HolderJESID HolderH HolderAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $132;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
input NODE -- HolderAT;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
if find(IntDATE,':','i') ge 1 OR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; NODE = '--NODE--'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; NODE = 'NAME&amp;nbsp; '&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; NODE = '--------'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; then delete;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;
if missing(IntFOR) then do;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dataset = IntFROM;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
else output;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
proc print;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Attached is a sample of my input file.&lt;/P&gt;</description>
      <pubDate>Sun, 12 Nov 2017 16:29:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412699#M279886</guid>
      <dc:creator>serge68</dc:creator>
      <dc:date>2017-11-12T16:29:07Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Obervations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412700#M279887</link>
      <description>&lt;P&gt;Considering your note:&lt;/P&gt;
&lt;PRE&gt;I've tried using $CHAR132; &lt;SPAN&gt;in my &lt;STRONG&gt;length&lt;/STRONG&gt; statement ...&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;pay attention, you shall define:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;length var_name  $132;
format var_name $132. ;
/* informat var_name $132. ; ??? */
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;As to your code, you can read just first 8 charachers to test &amp;nbsp;it and continue according to result:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data File1; 
  retain dataset;
  infile IFILE missover;                                         
  length NODE IntDATE IntFROM IntFOR     
       HeldNAME HeldNUM HeldDate HeldTIME HeldJESID            
       HeldFROM HeldFOR HeldF HeldS HeldC                      
       HolderNAME HolderT HolderJESID HolderH HolderAT        
       $132; 

   input @2 test $8.  @;  /* read first 8 characters and keep stay on line */
      
  if test  in ('--NODE--'  'NAME  ' '--------') then input; /* skip line */

  if test = 'DATASET ' then 
     input   @14 dataset $132. ;    
  else do;
     input @1 test $1. @2 NODE -- HolderAT;
     output;
  end;                                     
  drop test;
run;                   &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;You may need to refine my code, as I have not tested it.&lt;/P&gt;</description>
      <pubDate>Sun, 12 Nov 2017 17:07:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412700#M279887</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2017-11-12T17:07:53Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Obervations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412710#M279888</link>
      <description>&lt;P&gt;Some progress, thanks. Though its is picking up lines it shouldn't and I can't see why.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This statement seems to not work for the '&amp;nbsp; NAME&amp;nbsp; '. Its not skipping this line.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;if test&amp;nbsp; in ('--NODE--'&amp;nbsp; '  NAME&amp;nbsp; ' '--------') then input; /* skip line */&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've tried playing around with different variations of the spaces within it, and yet it always gets included when it shouldn't.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;Thanks&lt;/P&gt;</description>
      <pubDate>Sun, 12 Nov 2017 18:17:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412710#M279888</guid>
      <dc:creator>serge68</dc:creator>
      <dc:date>2017-11-12T18:17:49Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Obervations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412711#M279889</link>
      <description>&lt;P&gt;I think you're going about this in a difficult way.&amp;nbsp; There should be no need to assign a length or informat of $132 to every variable. In the example below, I've assigned an INFORMAT specific to each variable.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And you can use a naked INPUT statement to populate the _INFILE_ automatic variable.&amp;nbsp; It has a trailing @, for re-reading purposes.&amp;nbsp; Items 1 and 2 below is&amp;nbsp; a bit like your&amp;nbsp; logic, but the rest basically does conditional reading of subgroups of variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;if the line is blank, or characters 2 through 9 contain '&amp;nbsp; NAME&amp;nbsp; ','--NODE--', or '--------' then delete the input record&lt;/LI&gt;
&lt;LI&gt;If the input line has the string "DATASET NAME:" then input @ 'DATASET NAME:' DSNAME;&amp;nbsp;&amp;nbsp; Then delete the input record&lt;/LI&gt;
&lt;LI&gt;If it otherwise has non-blanks in characters 1-9, read NODE&lt;/LI&gt;
&lt;LI&gt;If it has non-blanks in characters 1-20, read INTDATE,&amp;nbsp; INTFROM, INTFOR&lt;/LI&gt;
&lt;LI&gt;Then read all the HELD... and HOLDER... variables.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  infile 'c:\temp\t.txt' firstobs=2 truncover;

  informat dsname $40.  node $8. intdate $5. intfrom hhmmss8. intfor stimer6.
       HeldNAME $8. HeldNUM 5.0 HeldDate $5. HeldTIME time8.0 HeldJESID $8.           
       HeldFROM time8.0 HeldFOR stimer6. HeldF HeldS HeldC $1.                      
       HolderNAME $8. HolderT $1. HolderJESID $8. HolderH $1. HolderAT time8.0
  ;
  retain dsname  -- intfor;
  input @;
  if _infile_=' ' then delete;
  else if substr(_infile_,2,8) in ('--NODE--','  NAME  ','--------') then delete;

  else if _infile_=: ' DATASET NAME:' then do;
   call missing (of dsname--intfor);
   input @'DATASET NAME:' dsname $40.;
   delete;
  end;

  if not (_infile_=:'         ') then input @2 node @;
  if not (_infile_=:'                    ') then input intdate intfrom intfor @;
  input heldname--holderat;

  format intfrom time8.0 intfor mmss5.0
         heldtime time8.0 heldfrom time8.0 heldfor mmss5.0
         holderat time8.0;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Notes:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;I use trailing @ signs, to hold the _INFILE_ variable for re-reading.&amp;nbsp; This allows the conditional reading of variables, depending on the structure of the data line.&lt;/LI&gt;
&lt;LI&gt;Because an obs is constructed from a variable number of lines, there is a retain statement for all the variables that are not read in with every data line (i.e.&amp;nbsp; dsname--intfor).&lt;/LI&gt;
&lt;LI&gt;Because of the retain statement, there is a call missing(of dsname--intfor) every time a new dataset name is encountered.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you really want a CSV file, then set up a FILE statement and a PUT statement at the bottom of the data step. Also you can change DATA WANT to DATA _NULL_.&lt;/P&gt;</description>
      <pubDate>Sun, 12 Nov 2017 18:33:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412711#M279889</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-11-12T18:33:21Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Obervations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412717#M279890</link>
      <description>&lt;P&gt;Maybe you need change line to:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;input @1 test $8.  @;     /* instead @2 */&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The text will be left justified.&lt;/P&gt;
&lt;P&gt;and change line:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;if test  in ('--NODE--'  'NAME    ' '--------') then input; /* skip line */
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;where&amp;nbsp;&lt;CODE class=" language-sas"&gt;&lt;STRONG&gt;'NAME&amp;nbsp; &amp;nbsp; '&lt;/STRONG&gt;&lt;/CODE&gt;&lt;CODE class=" language-sas"&gt;&amp;nbsp;- is left justified, up to 8 characters.&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You need also retain&lt;STRONG&gt; &lt;FONT face="monospace"&gt;NODE INTDATE INTFROM INTFOR&amp;nbsp;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="monospace"&gt;variables as they exist only on first data line.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 12 Nov 2017 19:41:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412717#M279890</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2017-11-12T19:41:24Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Obervations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412718#M279891</link>
      <description>&lt;P&gt;This is great. It pretty much gives me what I'm after. Just one thing I didn't account for in the example I provided. There are instances where only the HOLDER values are present(i.e. there could be multiple HOLDER values for a single HELD value).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;These are getting displayed with incorrect values. Not sure how I can account for that?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've attached a new sample input file which reflects this(Contentions02.txt). Doing a find on JAST0064 takes you to a line I'm referring to.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks….&lt;/P&gt;</description>
      <pubDate>Sun, 12 Nov 2017 20:06:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412718#M279891</guid>
      <dc:creator>serge68</dc:creator>
      <dc:date>2017-11-12T20:06:06Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Obervations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412790#M279892</link>
      <description>&lt;P&gt;Apply the same principles I described earlier.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Because variables HELDNAME--HELDC are sometime inherited from the prior line, they need to be RETAINed.&lt;/LI&gt;
&lt;LI&gt;If columns 35-95 are not blank, then input heldname--heldc&lt;/LI&gt;
&lt;LI&gt;And the last input statement now should only include the HOLDER... variables.&lt;/LI&gt;
&lt;/OL&gt;</description>
      <pubDate>Mon, 13 Nov 2017 04:01:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412790#M279892</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-11-13T04:01:19Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Obervations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412947#M279893</link>
      <description>&lt;P&gt;Great. This is exactly what I was after. Appreciate all your assistance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 13 Nov 2017 15:52:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merging-Obervations/m-p/412947#M279893</guid>
      <dc:creator>serge68</dc:creator>
      <dc:date>2017-11-13T15:52:45Z</dc:date>
    </item>
  </channel>
</rss>

