Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas 在使用Proc转置时,如何防止变量名的前导下划线_Sas_Transpose_Proc - Fatal编程技术网

Sas 在使用Proc转置时,如何防止变量名的前导下划线

Sas 在使用Proc转置时,如何防止变量名的前导下划线,sas,transpose,proc,Sas,Transpose,Proc,我正在尝试转换如下所示的数据集: A B C 2011 NH 25 2011 MA 40 2015 CA 50 2016 KY 58 我希望输出为: B 2011 2015 2016 NH 25 - - MA 40 - - CA -

我正在尝试转换如下所示的数据集:

  A        B        C
2011      NH        25
2011      MA        40 
2015      CA        50
2016      KY        58
我希望输出为:

 B     2011     2015      2016
NH      25        -         -
MA      40        -         -
CA       -        50        -
KY       -        -         58
目前我的代码是:

 proc transpose data = Test out = Test2(drop = _label_);
     id Year_Enter;
     Var Numeric;
     by Category NOTSORTED;
 run;
但是,当我运行此命令时,我所有的列名前面都有下划线,例如_2011、_2015、_2016

如何防止添加下划线


谢谢

您需要启用扩展变量名。SAS变量必须遵循一定的规则,其中一些可以重写:

名称的长度最多为32字节。 名称可以包含拉丁字母、数字或下划线。 除下划线外,名称不能包含空格或特殊字符。 名称必须以拉丁字母a–Z、a–Z或下划线开头。 如果启用选项选项validvarname=any;,您将删除数字变量名称前面的下划线,并使用扩展SAS命名规则。请参见下面的示例

data have;
    input A B$ C;
    datalines;
2011 NH 25
2011 MA 40
2015 CA 50
2016 KY 58
;
run;

options validvarname=any;
proc transpose data = have out = want(drop = _label_);
     id A;
     Var C;
     by B NOTSORTED;
run;

如果需要数据集,则可以为变量使用有效名称。变量名通常不能以数字开头。您可以使用PROC TRANSPOSE语句上的PREFIX=选项选择为数值变量的值添加前缀的字符,以生成有效名称。因此,您可以使用PREFIX=Y来生成变量名称,如Y2011,或者使用PREFIX=Year_u来生成名称,如Year_2011。您可以使用IDLABEL语句将裸数值字符串作为变量的标签

proc transpose data=have prefix=Year_ out=want(drop=_name_);
  by State;
  id Year;
  idlabel Year;
  var Value;
  format year 4.;
run;

proc print;
run;
但看起来您确实想要生成一个报告,而不是一个数据集。例如,您可以从原始数据集中使用PROC report创建该报告,而无需PROC转置

proc report missing data=have ;
  column state value,year ;
  define state / group ;
  define year / across ' ';
  define value / sum ' ';
run;

将数据值转换为元数据年,因为列名通常表示报告转换。考虑使用PROC表来进行转换。

data have; input
A        B $       C; datalines;
2011      NH        25
2011      MA        40 
2015      CA        50
2016      KY        58
run;

proc tabulate data=have;
  class a;
  class b / order=data;
  var c;
  table b='',a=''*c=''*sum='';
run;

为什么要使用不符合SAS变量名规则的变量名?
data have; input
A        B $       C; datalines;
2011      NH        25
2011      MA        40 
2015      CA        50
2016      KY        58
run;

proc tabulate data=have;
  class a;
  class b / order=data;
  var c;
  table b='',a=''*c=''*sum='';
run;