В SAS использовать цикл для переименования индексированных столбцов? - PullRequest
5 голосов
/ 20 февраля 2011

У меня есть набор данных с переменными, такими как col1, col2, col3, ..., col15. Я хочу переименовать их в new1, new2, new3, ..., new 15. Я могу написать 15 раз аналогичное переименование col1 = new1; в SAS, но как я могу добиться этого с помощью цикла? Спасибо.

Ответы [ 2 ]

9 голосов
/ 20 февраля 2011

Во-первых, неясно, говорите ли вы об операторе rename в proc datasets или в шаге данных.Если вам не нужно ничего делать с данными, вы должны обязательно использовать для этого наборы данных proc, потому что в противном случае (на шаге данных) вы без необходимости читаете / записываете каждую запись в наборе данных, просто чтобы изменить имена переменных.

Если вы используете шаг данных, просто используйте

rename col1-col15=new1-new15;

Я не уверен, что вы можете использовать этот ярлык в наборах данных proc.Что подводит нас к вашему зацикленному вопросу.Если вы не делаете это много раз или динамически, то, вероятно, так же просто скопировать / вставить код 15 раз.Вот способ сгенерировать нужный вам оператор, поместить его в макропеременную и использовать эту макропеременную в операторе переименования:

data _null_;
  length myVar $ 1000;
  *myVar='';
  do i=1 to 15;
    myVar=catx(' ',myVar,' ',cats('col',i,'=','new',i));
  end;
  call symput('rename',myVar);
run;

%put &rename;

proc datasets library=mylibrary;
  modify mydataset;
  rename &rename;
run;
3 голосов
/ 20 февраля 2011

Вот способ сделать это в случае, если имена ваших переменных соответствуют хорошему, простому шаблону именования:

 DATA out;
 SET  in;
 ARRAY oldnames (15) col1-col15;
 ARRAY newnames (15) new1-new15;
 DO i = 1 TO 15;
      newnames(i) = oldnames(i) ;
 END;
 RUN;

Или, более обобщенно:

 DATA out;
 SET  in;
 ARRAY oldnames (4) abc def ghi jkl ;
 ARRAY newnames (4) mno pqr stu vwx ;
 DO i = 1 TO 4;
      newnames(i) = oldnames(i) ;
 END;
 RUN;
...