proc追加中的列(变量)顺序

时间:2018-08-07 12:07:10

标签: sas append

我对SAS还很陌生。

我想附加两个数据集 Dataset1 Dataset2

数据集1 中的列顺序为A B C

数据集2 中的列顺序为b A c

请注意列名的大小写(大写和小写)

所以,如果我这样做

PROC APPEND BASE=Dataset1 DATA=Dataset2 FORCE;

运行;

附加操作是否会以所需的方式发生:

A should append to A

B should append to b

C should append to c

1 个答案:

答案 0 :(得分:3)

列的大小写和位置都不重要。

列是通过名称而不是位置来标识的。

示例可以帮助证明这一点;尝试一次运行以下步骤;阅读评论,检查日志并检查数据集:

/* creates data set have1 with columns a (char), b (numeric) then c (numeric) */
data have1;
   length a $ 1;

   input a b c;

   datalines;
1 2 3
4 5 6
7 8 9
;

/* creates data set have2 with columns b (char), a (numeric) then c (numeric) */
data have2;
   length b $ 1;

   input a b c;

   datalines;
1 2 3
4 5 6
7 8 9
;

/* attempts append, but as a & b have different types, missing values result */
proc append base = have1
            data = have2
            force
            ;
run;

/* creates data set have3 with columns a (char), b (numeric) then c (numeric) */
data have3;
   length a $ 1;

   input a b c;

   datalines;
1 2 3
4 5 6
7 8 9
;

/* creates data set have4 with columns b (numeric), a (char) then c (numeric) */
data have4;
   length b   8;
   length a $ 1;

   input a b c;

   datalines;
1 2 3
4 5 6
7 8 9
;

/* Appends successfully as variable types are the same even though order is different. */
/* Columns are identified by their names, not their position.                          */
proc append base = have3
            data = have4
            force
            ;
run;

编辑:在评论中回答问题:

  

类型相同但格式不同。例如num类型但DATE9.   格式,其他列的类型为num,但是ddmmyy格式将   造成任何问题吗?

变量的格式会影响其显示方式,基础数据保持不变,因此可以将一个数字列与另一个数字列附加在一起,唯一的区别是附加数据的格式将与基数相同数据,如@J_Lard在对您的问题的第一条评论中所述。

同样,一个例子可能有助于证明这一点:

/* creates data set have5 with columns a (numeric, formst date9.) and text */
data have5;
   format a date9.;

   input text $char10.;

   a = input(text,ddmmyy10.);

   datalines;
31/07/2018
;

/* creates data set have6 with columns a (numeric, formst ddmmyy.) and text */
data have6;
   format a ddmmyy.;

   input text $char10.;

   a = input(text,ddmmyy10.);

   datalines;
31/07/2018
;

/* appends, but see warning in log about format */
proc append base = have5
            data = have6
            force
            ;
run;

希望您有更多需要回答的问题(创建测试数据,然后追加/处理),可以采用该方法。如果您仍然有问题,那么我建议您提出一个新问题,并提供与此问题的链接(如果相关),以提供测试数据步骤供其他人运行以及您尝试使用任何日志消息的代码。