Как решить проблему: был 1 незакрытый блок DO? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующий код в SAS:

proc sort data=MYDATA1;
by VarNum Size Flavour Brand Retailer Market date; 
run; 
DATA MYDATA;
SET MYDATA1;
by VarNum Brand Size Flavour Retailer Market date; 
/* Loop while for transformations. */
SUM = 0;
VAR1 = 1;
V1= Transformation;
VAR = Variable_for_SAS;
DO WHILE(FIND(V1,";")<>0);

V=V1;

V1=substr(V1,1,FIND(V1,";")-1);

IF SUBSTR(V1,1,1)="/" THEN

VT=STRIP(SUBSTR(V1,2,Find(V1,";")-2))||STRIP(date);

if _n_=1 then do;
    declare hash h(dataset: 'MYDATA1');
    h.definekey('Variable_date');
    h.definedata('Variable_for_SAS');
    h.definedone();
end;
  if not h.find(key: VT) then new=Variable_for_SAS;
  h.find();

SUM1=1*VAR;
/*Overwrite variable*/
VAR=SUM1;

V1=substr(TRIM(V),FIND(V,";")+1);
run;

Но у меня есть ошибка:

run;
              _
              117
ERROR 117-185: There was 1 unclosed DO block.

Знаете ли вы, что я должен сделать, чтобы решить эту проблему?Это проблема, потому что я использую DO WHILE и хэш вместе?Теперь код заполнен.

1 Ответ

0 голосов
/ 29 ноября 2018

Просто добавьте пропущенный оператор END, где вы хотите, чтобы ваш цикл DO WHILE () заканчивался.

Поскольку вы могли бы выполнять многократные циклы даже на первой итерации шага данных, в соответствии с которым ваше условие IFвыполнить шаги по созданию хэша недостаточно, чтобы эти операторы выполнялись только один раз.Поэтому либо переместите блок, который создает объект HASH, ДО ПЕРЕД цикла while.Или добавьте дополнительные условия в оператор IF, чтобы он не выполнялся повторно на каждой итерации цикла DO WHILE.

...