Как перебирать набор данных по одной строке / наблюдению за раз - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть DataSet, который я создал с

filename tmp pipe 'dir "C:\Temp1\*.txt*" /b /s';

data Full;
    infile tmp dlm="\";
    length Path $2000 Path2 $2000 Path3 $2000 Path4 $2000 FileName $2000;
    input Path Path2 Path3 Path4 FileName;
run;

Результаты выглядят так:

C:\Temp1\test - Copy (12).txt
C:\Temp1\test - Copy.txt
C:\Temp1\test.txt
C:\Temp1\test - Copy (2).txt
C:\Temp1\test - Copy (3).txt
C:\Temp1\test - Copy (4).txt
C:\Temp1\test - Copy (5).txt
C:\Temp1\test - Copy (6).txt
C:\Temp1\test - Copy (7).txt
C:\Temp1\test - Copy (8).txt
C:\Temp1\test - Copy (9).txt
C:\Temp1\test - Copy (10).txt
C:\Temp1\test - Copy (11).txt

Я использую код ниже

options noxwait;
    data _null_;
    set Full nobs=nobs;
    i = 1;
    do while (i < nobs);
    set Full point=i;
    %let oldfile = <<<THIS IS WHERE I WANT THE DATA TO BE PULLED TO>>>;
    %let newfile = C:\Temp2\;
      rc= system("move &oldfile &newfile ");
      i = i + 1;
    put rc=;
    end;
    run;

в основномЯ хочу перебрать свой полный набор данных и установить для каждой строки значение oldfile.

Что мне нужно исправить в моем коде?

1 Ответ

0 голосов
/ 09 февраля 2019
Шаг

DATA уже является неявным циклом по всем строкам в наборе данных.Вам не нужно, чтобы это контролировало другое внешнее агентство.Кроме того, если вы только начинаете, старайтесь не смешивать переменные области действия данных и макроса.

непроверенный пример:

data Full;
    infile tmp;
    input; * read whole line into _infile_ buffer;
    filename = _infile_; * transfer buffer to variable;
run;

data _null_;
  set full;
  command = "move " || quote(trim(filename)) || " " || quote(trim("C:\Temp2\"));
  rc = system(command);
run;
...