如何使SAS数据集的第一行成为变量名?
我有一个已经导入的数据集,其中第一行包含变量名。我知道,通常在导入数据集时使用getnames=yes。但是,如果已经导入数据,如何使用数据步骤使第一行成为变量名 数据如下所示:如何使SAS数据集的第一行成为变量名?,sas,rename,Sas,Rename,我有一个已经导入的数据集,其中第一行包含变量名。我知道,通常在导入数据集时使用getnames=yes。但是,如果已经导入数据,如何使用数据步骤使第一行成为变量名 数据如下所示: A B C 1 Name 1 Name 2 Name 3 2 2 4 66 3 3 5 6 已经导入的数据的问题是,所有数字数据可能都放在字符变量中,因
A B C
1 Name 1 Name 2 Name 3
2 2 4 66
3 3 5 6
已经导入的数据的问题是,所有数字数据可能都放在字符变量中,因为导入过程看到的“第一行”数据包含一些字符数据,并驱动自动列构造的推断 无论如何,您将需要为每个必须重命名的变量构造重命名对old name=new name。第1行中的新名称可以
转置该行以将这些名称部分作为数据进行排列。SQL with:into
和之间用
分隔可以填充宏变量,以便在执行列重命名而不重写整个数据集的过程中使用。最后,使用modify
的数据步骤可以再次在不重写整个数据集的情况下删除一行
filename sandbox temp;
data _null_;
file sandbox;
put 'A,B,C';
put 'Name 1, Name 2, Name 3';
put '2,4,66';
put '3,5,6';
run;
proc import datafile=sandbox dbms=csv replace out=work.oops;
run;
proc transpose data=oops(obs=1) out=renames;
var _all_;
run;
proc sql noprint;
select cats(_name_,"=",compress(col1,,"KN"))
into :renames separated by ' '
from renames;
%put NOTE: &=renames;
proc datasets nolist lib=work;
modify oops;
rename &renames;
run;
data oops;
modify oops;
remove;
stop;
run;
%let syslast=oops;
已经导入的数据的问题是,所有数字数据可能都放在字符变量中,因为导入过程看到的“第一行”数据包含一些字符数据,并驱动自动列构造的推断
无论如何,您将需要为每个必须重命名的变量构造重命名对old name=new name。第1行中的新名称可以转置该行以将这些名称部分作为数据进行排列。SQL with:into
和之间用
分隔可以填充宏变量,以便在执行列重命名而不重写整个数据集的过程中使用。最后,使用modify
的数据步骤可以再次在不重写整个数据集的情况下删除一行
filename sandbox temp;
data _null_;
file sandbox;
put 'A,B,C';
put 'Name 1, Name 2, Name 3';
put '2,4,66';
put '3,5,6';
run;
proc import datafile=sandbox dbms=csv replace out=work.oops;
run;
proc transpose data=oops(obs=1) out=renames;
var _all_;
run;
proc sql noprint;
select cats(_name_,"=",compress(col1,,"KN"))
into :renames separated by ' '
from renames;
%put NOTE: &=renames;
proc datasets nolist lib=work;
modify oops;
rename &renames;
run;
data oops;
modify oops;
remove;
stop;
run;
%let syslast=oops;
由于将名称作为数据读取可能会使所有变量都具有字符特性,因此可以尝试将数据转置两次以修复它。这对于小型数据集来说非常有效
因此,第一个转置将把当前名称放入\u name\u
变量中,并将每一行转换为一列。第二个proc转置可以删除原始名称,并使用第一行(新的COL1
变量)作为名称
proc transpose data=have out=wide ;
var _all_;
run;
proc transpose data=wide(drop=_name_ rename=(col1=_name_)) out=want(drop=_name_ _label_);
var col:;
id _name_;
run;
由于将名称作为数据读取可能会使所有变量都具有字符特性,因此可以尝试将数据转置两次以修复它。这对于小型数据集来说非常有效
因此,第一个转置将把当前名称放入\u name\u
变量中,并将每一行转换为一列。第二个proc转置可以删除原始名称,并使用第一行(新的COL1
变量)作为名称
proc transpose data=have out=wide ;
var _all_;
run;
proc transpose data=wide(drop=_name_ rename=(col1=_name_)) out=want(drop=_name_ _label_);
var col:;
id _name_;
run;
如果变量是数字,则必须将其转换为字符。你确定吗?目的是什么?这是一个坏主意,考虑添加标签吗?如果你试图导出一个带有标签和变量名的文件,在两个单独的行中,这里有一个方法:如果变量是数字的,它就必须被转换成字符。你确定吗?目的是什么?这是个坏主意,考虑添加标签吗?如果你试图导出一个标签和变量名的文件,在两个单独的行中,这里有一个方法: