在SAS中使用循环重命名索引列?

发布于 2024-10-18 04:06:51 字数 134 浏览 7 评论 0原文

我有一个数据集,其中变量为 col1、col2、col3、...、col15。我想将它们重命名为new1,new2,new3,...,new 15。我可以写15次类似的rename col1 = new1;在 SAS 中,但如何使用循环实现此目的?谢谢。

I have a dataset with variables as col1, col2, col3, ..., col15. I want to rename them to new1, new2, new3, ..., new 15. I can write 15 times the similar rename col1 = new1; in SAS but how can I achieve this using loop? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

戴着白色围巾的女孩 2024-10-25 04:06:51

首先,不清楚您是在谈论 proc datasets 中的 rename 语句还是在数据步骤中。如果您不需要对数据执行任何其他操作,则绝对应该使用 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;

Firstly, it's not clear whether you're talking about the rename statement in proc datasets or in the data step. If you don't need to do anything else to the data, you should definitely use proc datasets to do this, because otherwise (in a data step) you're unnecessarily reading/writing every record in the dataset, just to alter variable names.

If you are using the data step, just use

rename col1-col15=new1-new15;

I'm not sure if you can use that shortcut in proc datasets. Which brings us to your looping question. Unless you're doing this lots of times or dynamically, it's probably just as easy to copy/paste the code 15 times. Here's a way to generate the statement you want, put it in a macro variable, and use that macro variable in the rename statement:

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;
温柔嚣张 2024-10-25 04:06:51

如果您的变量名称符合良好、简单的命名模式,则可以采用以下方法:

 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;

Here's a way to do it in the case that your variable names fit a nice, easy naming pattern:

 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;

Or, more generically:

 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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文