Получите значение переменной в каждом наблюдении к макропеременной - PullRequest
1 голос
/ 13 января 2012

У меня есть таблица с именем * term_table *, содержащая следующие столбцы

comp, term_type, термин, оценка, ранг

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

Data Work.term_table;
 input  Comp $
        Term_type $
        Term $
        Score
        Rank
      ;
 datalines;
 comp1 term_type1 A 1 1  
 comp2 term_type2 A 2 10
 comp3 term_type3 A 3 20
 comp4 term_type4 B 4 20
 comp5 term_type5 B 5 40
 comp6 term_type6 B 6 100
 ;
Run;

    %local j;
    DATA tmp;
    SET term_table;
    LENGTH freq 8;

    BY &by_var term_type term;
    RETAIN freq;

    CALL SYMPUT('curr_r', rank);
    IF first.term THEN DO;
        %do j = 1 %to &curr_r;
                         do some thing
                    %end;
    END;
RUN;

Не могли бы вы помочь мне решить проблему

Большое спасибо

Hung

1 Ответ

1 голос
/ 13 января 2012

Оператор symput вызова создает макрос var & curr_r со значением rank, но он недоступен до окончания шага данных.

Однако я не думаю, что вам нужно создавать макрос var& curr_r.Я не думаю, что макрос нужен вообще.

Я думаю, что ниже должно сработать: (Не проверено)

DATA tmp;
 SET term_table;
 LENGTH freq 8;

 BY &by_var term_type term;
 RETAIN freq;

 IF first.term THEN DO;
  do j = 1 to rank;
   <do some thing>
  end;
 END;
RUN;

Если вам нужно было использовать ранг из предыдущих наблюдений, используйтефункция LAG.

Start=Lag(rank);

Чтобы сохранить каждое значение RANK в макропеременной, это будет сделано ниже:

Proc Sql noprint;
 select count(rank)
 into :cnt
 from term_table;

 %Let cnt=&cnt;

 select rank
 into :curr_r1 - :curr_r&cnt
 from term_table;
quit;
...