如何创建将值与同一列的总平均值进行比较的二进制列,如果 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;
我正在做作业,不允许使用 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;