p*****o 发帖数: 543 | 1 如果我有一个DATA SET A,不知道里面有多少变量,也不知道变量的名字。
请问有没有办法讲变量的名称改为:COL1,COL2,COL3,...COLN?
谢谢!! |
A*******s 发帖数: 3942 | 2 transpose,改col1的值,再transpose回去
【在 p*****o 的大作中提到】 : 如果我有一个DATA SET A,不知道里面有多少变量,也不知道变量的名字。 : 请问有没有办法讲变量的名称改为:COL1,COL2,COL3,...COLN? : 谢谢!!
|
p*****o 发帖数: 543 | |
A*******s 发帖数: 3942 | 4 oh, 刚发现一点小错误,transpose之后,默认的col1对应的其实是转置后的第二列,
你要改名的是第一列,默认的column name是_Name_
【在 p*****o 的大作中提到】 : Thanks a lot!
|
n********6 发帖数: 1511 | 5 array / macro loop / format?
【在 p*****o 的大作中提到】 : 如果我有一个DATA SET A,不知道里面有多少变量,也不知道变量的名字。 : 请问有没有办法讲变量的名称改为:COL1,COL2,COL3,...COLN? : 谢谢!!
|
w***y 发帖数: 114 | 6 proc contents to check variable name |
y*****t 发帖数: 1367 | 7 用array得先知道dataset有多少column的~
【在 n********6 的大作中提到】 : array / macro loop / format?
|
a***r 发帖数: 420 | 8 围观
只知道R怎么做,觉得好方便。。。
【在 p*****o 的大作中提到】 : 如果我有一个DATA SET A,不知道里面有多少变量,也不知道变量的名字。 : 请问有没有办法讲变量的名称改为:COL1,COL2,COL3,...COLN? : 谢谢!!
|
n********6 发帖数: 1511 | 9 check system table and get the number of columns.
【在 y*****t 的大作中提到】 : 用array得先知道dataset有多少column的~
|
D******n 发帖数: 2836 | 10 http://www2.sas.com/proceedings/sugi28/118-28.pdf
妈的,SAS也真够麻烦的,R里面一行就搞定。
【在 n********6 的大作中提到】 : check system table and get the number of columns.
|
|
|
A*******s 发帖数: 3942 | 11 越麻烦越好,要不懂sas的怎么能找到工作,哈哈
【在 D******n 的大作中提到】 : http://www2.sas.com/proceedings/sugi28/118-28.pdf : 妈的,SAS也真够麻烦的,R里面一行就搞定。
|
d*******1 发帖数: 854 | 12 how to do it in R? please.....
【在 a***r 的大作中提到】 : 围观 : 只知道R怎么做,觉得好方便。。。
|
D******n 发帖数: 2836 | 13 names(data)<-paste('col',1:ncol(data),sep="")
【在 d*******1 的大作中提到】 : how to do it in R? please.....
|
A*******s 发帖数: 3942 | 14 涉及变量名的改变的基本上是两种思路,一种是用transpose将变量名变成变量然后改
变,一种是用proc sql's dictionary.table读入变量名到macro variables,然后再用
proc sql或者data step改名。lz的这个问题我觉得用proc transpose更简单些。
data test;
a=1;
b=3;
c=6;
d=3;
e=8;
f=9;
run;
proc transpose data=test out=test1;
run;
data test1;
set test1;
_Name_=cats('col_',put(_N_,$10.));
run;
proc transpose data=test1 out=test2(drop=_Name_);
run; |
D******n 发帖数: 2836 | 15 this codes simpler, but i guess not very efficient, what if the number of ob
s is very large? does it matter?
【在 A*******s 的大作中提到】 : 涉及变量名的改变的基本上是两种思路,一种是用transpose将变量名变成变量然后改 : 变,一种是用proc sql's dictionary.table读入变量名到macro variables,然后再用 : proc sql或者data step改名。lz的这个问题我觉得用proc transpose更简单些。 : data test; : a=1; : b=3; : c=6; : d=3; : e=8; : f=9;
|
d*******1 发帖数: 854 | 16 _Name_=cats('col_',put(_N_,$10.));
这个只适用于每个var只有一个obs的情况,最好产生个一个给var标号的numberical
variable.
【在 A*******s 的大作中提到】 : 涉及变量名的改变的基本上是两种思路,一种是用transpose将变量名变成变量然后改 : 变,一种是用proc sql's dictionary.table读入变量名到macro variables,然后再用 : proc sql或者data step改名。lz的这个问题我觉得用proc transpose更简单些。 : data test; : a=1; : b=3; : c=6; : d=3; : e=8; : f=9;
|
d*******1 发帖数: 854 | 17 proc sort data=test1; by _name_; run;
data test1;
set test1;
by _name_;
if first._name_ then i++;
_Name_=cats('col_',put(i,$10.));
run;
proc transpose data=test1 out=test2(drop=_Name_);
var col1;
id=_name_;
run;
另外一个问提是所有的numerical都变成char了, 如果原始的变量是 numerical和char
的混合的话, hehe
【在 A*******s 的大作中提到】 : 涉及变量名的改变的基本上是两种思路,一种是用transpose将变量名变成变量然后改 : 变,一种是用proc sql's dictionary.table读入变量名到macro variables,然后再用 : proc sql或者data step改名。lz的这个问题我觉得用proc transpose更简单些。 : data test; : a=1; : b=3; : c=6; : d=3; : e=8; : f=9;
|
A*******s 发帖数: 3942 | 18 对,你的答案很全面,我都没考虑你说的这两个问题。那看来通过proc sql's dictinary.table 和macro是唯一的方法了。
【在 d*******1 的大作中提到】 : proc sort data=test1; by _name_; run; : data test1; : set test1; : by _name_; : if first._name_ then i++; : _Name_=cats('col_',put(i,$10.)); : run; : proc transpose data=test1 out=test2(drop=_Name_); : var col1; : id=_name_;
|
A*******s 发帖数: 3942 | 19 确实不efficient。
ob
【在 D******n 的大作中提到】 : this codes simpler, but i guess not very efficient, what if the number of ob : s is very large? does it matter?
|