繁体   English   中英

如何使 SAS 数据集的第一行成为变量名称?

[英]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该行以将这些名称部分排列为数据。 带有:intoseparated 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM