繁体   English   中英

SAS桌键无钥匙

[英]SAS table joint without key

我有两个表,A和B,B是1 x 4个表(类型,频率,最大,最小),这是proc平均值的输出。 我想为每条记录的表A添加最大和最小值,因此没有像a.key = b.key这样的语句,因为我只想向表A添加相同编号的列。我该怎么办?

您可以通过两种方式将摘要统计信息添加到原始数据集中,一种是使用PROC SQL,另一种是使用DATA步骤。 下面有两个示例,其中一个示例考虑是否还有其他分组变量,即您想将特定来源的所有汽车的总数与组平均值相加。

这是这两种方法的演示,这会增加平均值,但是您可以扩展平均值以轻松说明其他统计信息。

******************************************************;
*Add average value to a dataset;
*Solution 1 - PROC MEANS + Data step;
******************************************************;

proc means data=sashelp.class noprint;
    output out=avg_values mean(height)=avg_height;
run;

data class_data;
    set sashelp.class;

    if _n_=1 then
        set avg_values;
run;

proc print data=class;
run;

*Solution 2 - PROC SQL - note the warning in the log;
PROC SQL;
Create table class_sql as
select *, mean(height) as avg_height
from sashelp.class;
quit;

******************************************************;
*Add average value to a dataset - with grouping variables;
*Solution 1 - PROC MEANS + Data step;
******************************************************;
proc means data=sashelp.class noprint nway;
class sex;
    output out=avg_values mean(height)=avg_height;
run;

*sort data before merge;
proc sort data=sashelp.class out=class;
by sex;
run;

data class_data;
 merge class avg_values;
 by sex;


run;

proc print data=class_data;
run;

*Solution 2 - PROC SQL - note the warning in the log;
PROC SQL;
Create table class_sql as
select *, mean(height) as avg_height
from sashelp.class
group by sex;
quit;

将单个变量添加到所有列的标准方法不是合并,而是set语句。 这利用了以下事实:默认情况下,SAS将保留通过SET / MERGE / UPDATE进入的数据集中的所有变量; 只要您使用分支(IF / THEN)来防止SAS在数据集为空时尝试读取它,它就会做您想要的事情。

例如,您有SASHELP.CLASS,并且想要附加平均身高/体重。 您首先具有proc means

proc means data=sashelp.class noprint;
  var height weight;
  output out=class_means mean= /autoname;
run;

然后,使用set语句,并在其周围加上if _n_ = 1子句,以确保仅在第一次迭代中执行该语句。 如果不进行此设置,SAS将无法在该数据集中找到第二个观测值,并在您期望之前终止数据步骤(尝试!)。

data class_with_mean;
  set sashelp.class;
  if _n_=1 then set class_means(keep=weight_mean height_mean);
run;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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