1

みんな。

私を夢中にさせている質問があります。

次のような 2 つのテキスト ファイルがあるとします。

ファイル_one.txt:

Name_sample_f1       *spans one line 
File_sample_f1       *spans one line 
String_sample_f1     *spans multiple, varying lines until the end of the file 
String_sample_f1 

ファイル_two.txt:

Name_sample_f2       *spans one line 
File_sample_f2       *spans one line 
String_sample_f2     *spans multiple, varying lines until the end of the file 
String_sample_f2 
String_sample_f2 
String_sample_f2 

それらの両方をtestという名前のデータセットに入力し、次の形式を取りたいと思います。

    Name             File             String
    ----             ----             ------
1   Name_sample_f1   File_sample_f1   String_sample_f1 
                                      String_sample_f1 
2   Name_sample_f2   File_sample_f2   String_sample_f2 
                                      String_sample_f2 
                                      String_sample_f2 
                                      String_sample_f2 

誰かが助けてくれるなら、前もって感謝します!

ありがとう

4

2 に答える 2

1

3 つのデータステップほど複雑にする必要はありません (特に N 個のファイルを作成する場合)。とても簡単です。EOV インジケーター (ボリュームの終わり) を使用して、新しいファイルの開始時を確認し [ボリューム/ファイルの終了後にEOV がトリップする]、新しいファイルの開始時に名前を読み取るおよび filename を最初の 2 行で指定します。

data test;
format name filename $100.;
retain name filename line;
infile '("c:\temp\file1.txt", "c:\temp\file2.txt")' eov=end lrecl=100 pad truncover; *or use wildcards, like infile "c:\temp\file*.txt";
input a $ @;
put _all_;
if (_n_=1) or (end=1) then do;
  end=0;
  line=1;
end;
else line+1;
if line=1 then do;
  input @1 name $100.;
end;
else if line=2 then do;
  input @1 filename $100.;
end;
else do;
  input @1 string $100.;
  output;
end;
run;
于 2013-01-18T16:56:58.163 に答える
0
filename file1 'testfile1.txt';
filename file2 'testfile2.txt';

DATA file1;
LENGTH thisname thisfile thistext $ 200;
RETAIN thisname thisfile;
linecounter=0;
DO UNTIL(eof);
  INFILE file1 end = eof;
  INPUT;
  linecounter+1;
  IF (linecounter eq 1) THEN thisname=_infile_;
  ELSE IF (linecounter eq 2) then thisfile=_infile_;
  ELSE DO;
     thistext=_infile_;
     output;
  END;
END;
RUN;


DATA file2;
LENGTH thisname thisfile thistext $ 200;
RETAIN thisname thisfile;
linecounter=0;
DO UNTIL(eof);
  INFILE file2 end = eof;
  INPUT;
  linecounter+1;
  IF (linecounter eq 1) THEN thisname=_infile_;
  ELSE IF (linecounter eq 2) then thisfile=_infile_;
  ELSE DO;
     thistext=_infile_;
     output;
  END;
END;
RUN;

DATA all_files;
SET file1 file2;
RUN;

PROC PRINT DATA=all_files; RUN;
于 2013-01-18T08:45:11.020 に答える