如何创建将值与同一列的总平均值进行比较的二进制列,如果 nb > average=1 & nb < average=0

How to create binary column that compares a value to the total average of the same column such that if nb > average=1 & nb < average=0

我正在做作业,不允许使用 PROC SQL 并且必须使用 DATA STEP 或其他 PROC。我有一个数据集 (Table A),并且我正在尝试同时计算一些东西,但在 r/sas、Whosebug & 上花了几个小时后,我并没有更接近我的答案YouTube。我需要在 Table A 中创建一个二进制列,如果第 3 列中的值 >= 第 3 列的平均值,则该列 =1,但按国家/地区分组。在 PROC SQL 中很简单:

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,但这会创建一个新的 table 以及任何将其合并回 Table 的尝试 A 带回我在先前查询中删除的不相关的列:

PROC MEANS DATA=EARL.A;
    BY country;
    VAR new_cases;
output out=means(drop=_type_ _freq_) mean=mean;
RUN;

我是 SAS 数据步骤的新手,但精通 SQL :( 所以任何指导将不胜感激。

谢谢!

您没有显示 merge 的尝试,但过程非常简单。

示例:

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;