楼主: wkn1986
5074 12

[原创博文] 求:重新命名多个不同变量 [推广有奖]

  • 0关注
  • 4粉丝

已卖:127份资源

教授

63%

还不是VIP/贵宾

-

威望
0
论坛币
1656 个
通用积分
12.9139
学术水平
8 点
热心指数
14 点
信用等级
5 点
经验
10268 点
帖子
549
精华
0
在线时间
2400 小时
注册时间
2008-9-15
最后登录
2025-11-18

楼主
wkn1986 发表于 2010-5-13 22:57:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现有一个数据表有n(比较大)个变量,现在想把变量从第一个开始命名为x1-xn,不知在SAS中可以搞定不?谢谢各位了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据表 命名 数据表

回帖推荐

yatming 发表于9楼  查看完整内容

1# wkn1986 data a; input z x c v b n m; cards; 1 2 3 4 5 6 7 5 6 7 8 9 0 1 ; run; options mprint; %macro rename(lib,dsn,new); proc sql noprint; select nvar into :num_vars from dictionary.tables where libname="%upcase(&LIB)" and memname="%upcase(&DSN)"; select distinct(name) into :var1-:var%trim(&num_vars) from dictionary.columns where libname="%upcase(&LIB)" and m ...

pobel 发表于7楼  查看完整内容

data a; input z x c v b n m; cards; 1 2 3 4 5 6 7 5 6 7 8 9 0 1 ; run; proc sql noprint; select "rename " || strip(name) ||"= x"||put(varnum,best.-l)||";" into :rename separated by " " from dictionary.columns where libname="WORK" and memname="A"; quit; data b; set a; &rename run;

sopching 发表于5楼  查看完整内容

呵呵。我又来了。我自己编了个程序。 data a; input z x c v b n m; cards; 1 2 3 4 5 6 7 5 6 7 8 9 0 1 ; run; proc transpose data=a out=b; run; data c(drop=i); do i=1 to n; set b nobs=n; _name_='x'||left(i); output; end; run; proc transpose data=c out=d(drop=_name_); run;

本帖被以下文库推荐

沙发
wkn1986 发表于 2010-5-13 22:57:23
自己先顶了,谢谢

藤椅
wkn1986 发表于 2010-5-13 23:18:11
继续顶一下

板凳
sopching 发表于 2010-5-13 23:22:54
这个问题还真没遇见过,坐等高手解答。

报纸
sopching 发表于 2010-5-13 23:51:43
呵呵。我又来了。我自己编了个程序。
data a;
input  z x c v b n m;
cards;
1 2 3 4 5 6 7
5 6 7 8 9 0 1
;
run;
proc transpose data=a out=b;
run;
data c(drop=i);
do i=1 to n;
set b nobs=n;
_name_='x'||left(i);
output;
end;
run;
proc transpose data=c out=d(drop=_name_);
run;
已有 2 人评分经验 论坛币 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
crackman + 1 精彩帖子

总评分: 经验 + 3  论坛币 + 3  热心指数 + 1   查看全部评分

地板
sopching 发表于 2010-5-14 00:19:28
但是这是说你已经用别的变量名保存了这些变量之后的修改。如果是一开始就没有定义的话。
你可以直接用Length 定义x1-xn变量 直接用他们来作为你的变量名。

7
pobel 在职认证  发表于 2010-5-14 08:09:56
data a;
input  z x c v b n m;
cards;
1 2 3 4 5 6 7
5 6 7 8 9 0 1
;
run;


proc sql noprint;
   select "rename " || strip(name) ||"= x"||put(varnum,best.-l)||";"
        into :rename separated by " "
         from dictionary.columns
         where libname="WORK" and memname="A";
quit;


data b;
   set a;
   &rename
run;
已有 2 人评分经验 论坛币 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
crackman + 1 精彩帖子

总评分: 经验 + 3  论坛币 + 3  热心指数 + 1   查看全部评分

8
wkn1986 发表于 2010-5-14 08:57:47
谢谢楼上各位的回复,我自己也做了一个:
data a;
input  z x c v b n m;
cards;
1 2 3 4 5 6 7
5 6 7 8 9 0 1
;
run;
proc transpose data=a out=a1 ;
run;
data a2;
set a1;
_name_=compress('p'||_n_);
run;
proc transpose data=a2 out=af (drop=_name_);
run;
最终将所有变量命名为p1-p7

9
yatming 发表于 2010-5-14 09:21:22
1# wkn1986

data a;
input  z x c v b n m;
cards;
1 2 3 4 5 6 7
5 6 7 8 9 0 1
;
run;

options mprint;

%macro rename(lib,dsn,new);
proc sql noprint;
select nvar into :num_vars
from dictionary.tables
where libname="%upcase(&LIB)" and memname="%upcase(&DSN)";

select distinct(name) into :var1-:var%trim(&num_vars)
from dictionary.columns
where libname="%upcase(&LIB)" and memname="%upcase(&DSN)";
quit;
run;

proc datasets library=&lib;
modify a;
rename
%do i=1 %to &num_vars;
   &&var&i=&new&i
%end;
;
run;
%mend;

%rename(work,a,x)
已有 2 人评分经验 论坛币 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
crackman + 1 精彩帖子

总评分: 经验 + 3  论坛币 + 3  热心指数 + 1   查看全部评分

10
sdu0632 发表于 2010-5-14 12:55:38
将数据导出后如  txt 文件, 然后重新导入。
已有 1 人评分热心指数 收起 理由
crackman + 1 呵呵 有点意思

总评分: 热心指数 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 14:30