[英]How can I make the first row of a SAS dataset the variable names?
我有一个已经导入的数据集,其中第一行包含变量名称。 我知道通常在导入数据集时使用 getnames = yes。 但是,如果数据已经导入,如何使用数据步骤使第一行成为变量名称?
数据看起来像:
A B C
1 Name 1 Name 2 Name 3
2 2 4 66
3 3 5 6
由于将名称读取为数据可能会使您的所有变量都成为字符,因此您可以尝试将数据转置两次以修复它。 这将适用于小型数据集。
因此,第一个转置会将当前名称放入_NAME_
变量并将每一行转换为一列。 第二个过程转置可以删除原始名称并使用第一行(新的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;
已导入数据的问题在于,所有数字数据可能都放在字符变量中,因为导入过程看到的“第一行”数据包含一些字符数据,并推动了自动列构建的推理。
无论如何,您需要为每个必须重命名的变量构造重命名对old-name = new-name 。 位于第 1 行的新名称可以transpose
该行以将这些名称部分排列为数据。 带有:into
和separated by
符的 SQL 可以填充一个宏变量,以便在执行列重命名的proc datasets
步骤中使用,而无需重写整个数据集。 最后,带有modify
的 DATA 步骤可以再次原地remove
一行,而无需重写整个数据集。
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.