SAS表联合无键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAS表联合无键相关的知识,希望对你有一定的参考价值。
我有两个表,A和B,B是1 x 4表(Type,Freq,max,min),它是proc mean的输出。我想为每条记录添加max和min到表A,所以没有像a.key = b.key那样的语句,因为我只想在表A中添加相同数字的列。我该怎么办?
答案
您可以通过两种方式将摘要统计信息添加到原始数据集中,一种使用PROC SQL,另一种使用DATA步骤。下面有两个例子,一个考虑你是否有一个额外的分组变量,即你想加入特定Origin的所有汽车的总数和组平均值。
以下是两种方法的演示,这会增加平均值,但您可以将其扩展为轻松考虑其他统计信息。
******************************************************;
*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将无法在该数据集中找到第二个观察结果并在您预期之前终止datastep(尝试它!)。
data class_with_mean;
set sashelp.class;
if _n_=1 then set class_means(keep=weight_mean height_mean);
run;
以上是关于SAS表联合无键的主要内容,如果未能解决你的问题,请参考以下文章