Sas 如何创建将值与同一列的总平均值进行比较的二进制列,以便如果nb>;平均值=1&;注意<;平均值=0
我正在处理一项任务&不允许使用PROC-SQL&必须使用DATA-STEP或其他PROC。我有一个数据集(表a)&我试图同时计算一些东西,在r/sas、stackoverflow和YouTube上花了几个小时之后,我还没有接近我的答案。我需要在表a中创建一个二进制列,如果第3列中的值>=第3列的平均值,则该列=1,但按国家分组。在PROC SQL中,它非常简单:Sas 如何创建将值与同一列的总平均值进行比较的二进制列,以便如果nb>;平均值=1&;注意<;平均值=0,sas,datastep,Sas,Datastep,我正在处理一项任务&不允许使用PROC-SQL&必须使用DATA-STEP或其他PROC。我有一个数据集(表a)&我试图同时计算一些东西,在r/sas、stackoverflow和YouTube上花了几个小时之后,我还没有接近我的答案。我需要在表a中创建一个二进制列,如果第3列中的值>=第3列的平均值,则该列=1,但按国家分组。在PROC SQL中,它非常简单: PROC SQL; CREATE TABLE Earl.A AS SELECT * , CASE WHEN A.new_cases
PROC SQL;
CREATE TABLE Earl.A AS
SELECT * ,
CASE WHEN A.new_cases > AVG(A.new_cases)
THEN 1 ELSE 0
END AS Global_Average_Comparison
FROM Earl.A AS A
QUIT;
但在SAS数据步骤中……我感觉有点像头灯里的鹿。我尝试使用PROC MEANS,但这会创建一个新表&任何将其合并回表a的尝试都会返回我在以前的查询中删除的不相关的列:
PROC MEANS DATA=EARL.A;
BY country;
VAR new_cases;
output out=means(drop=_type_ _freq_) mean=mean;
RUN;
我对SAS数据步骤非常陌生,但精通SQL:(因此,任何指导都将不胜感激
谢谢!您没有显示合并的尝试,但是过程非常简单 例如:
data have;
call streaminit(123);
do country = 'A', 'B', 'C';
do _n_ = 1 to 100 + rand('integer',50);
x = rand('integer', 25, 75);
output;
end;
end;
run;
proc means noprint data=have;
by country;
var x;
output out=means(keep=country x_mean) mean=x_mean;
run;
data want;
merge have means;
by country;
above_average_flag = x > x_mean;
* drop x_mean;
run;
忘记在PROC SQL中按国家添加组…合并不会返回已删除的变量。除非您正在与未删除变量的旧数据集合并。如何向数据集添加摘要统计信息。或查找DoW循环。