military - SQL y matrices de SQL SAS
sas software (2)
Esta es una pregunta de SAS novato. Tengo un conjunto de datos con las variables numéricas v1-v120, V y una variable categórica Z (con decir tres valores posibles). Para cada posible valor de Z, me gustaría obtener otro conjunto de variables w1-w120, donde w {i} = suma (v {i}} / V, donde la suma es una suma sobre un valor dado de Z. Por lo tanto Estoy buscando matrices 3 * 120 en este caso. Puedo hacerlo en pasos de datos, pero me gustaría hacerlo mediante Proc SQL o Proc MEANS, ya que el número de variables categóricas en el conjunto de datos real es moderadamente grande. Gracias de antemano .
Aquí hay una solución usando proc sql. Probablemente también podría hacer algo similar con proc significa usar un conjunto de datos de salida y una declaración ''por''.
data t1;
input z v1 v2 v3;
datalines;
1 2 3 4
2 3 4 5
3 4 5 6
1 7 8 9
2 4 7 9
3 2 2 2
;
run;
%macro listForSQL(varstem1, varstem2, numvars);
%local numWithCommas;
%let numWithCommas = %eval(&numvars - 1);
%local i;
%do i = 1 %to &numWithCommas;
mean(&varstem1.&i) as &varstem2.&i,
%end;
mean(&varstem1.&numvars) as &varstem2.&numvars
%mend listForSQL;
proc sql;
create table t2 as
select
z,
%listForSQL(v, z, 3)
from t1
group by z
;
quit;
Es fácil hacer esto con proc means
. Usando el conjunto de datos t1
de la respuesta de Louisa Gray:
proc means data=t1 nway noprint;
class z;
var v1-v3;
output out=t3 mean=w1-w3;
run;
Esto crea una tabla de resultados que coinciden con los resultados de SQL.