使用 PROC 在 SAS 中折叠数据 SQL
Collapsing data in SAS with PROC SQL
一段时间以来,我一直在尝试使用 PROC SQL
和 GROUPBY
来折叠数据集,但一直没有成功,我想知道是否可以得到一些帮助。这是我正在尝试做的一个例子。假设我们有以下数据:
id year parent_id age
"01" 1990 "23" 17
"01" 1991 "23" 18
"01" 1992 "23" 19
"02" 1978 "18" 24
"02" 1979 "18" 25
我们希望通过 id
跨年保留 min
age
的行来折叠以获得以下数据集
id year parent_id age
"01" 1990 "23" 17
"02" 1978 "18" 24
我尝试了一些类似
的方法
proc sql;
CREATE TABLE output_tablename as
SELECT DISTINCT id, year, parent_id, min(age) as age
FROM input_tablename
GROUPBY id;
quit;
无济于事。
您可以使用 HAVING 子句只选择年龄 = min(age) 的记录。
proc sql;
create table want as
select * from have
group by ID
having age=min(age);
quit;
PROC 排序选项:
proc sort data=have; by id descending age;
run;
proc sort data=have nodupkey out=want;
by id;
run;
一段时间以来,我一直在尝试使用 PROC SQL
和 GROUPBY
来折叠数据集,但一直没有成功,我想知道是否可以得到一些帮助。这是我正在尝试做的一个例子。假设我们有以下数据:
id year parent_id age
"01" 1990 "23" 17
"01" 1991 "23" 18
"01" 1992 "23" 19
"02" 1978 "18" 24
"02" 1979 "18" 25
我们希望通过 id
跨年保留 min
age
的行来折叠以获得以下数据集
id year parent_id age
"01" 1990 "23" 17
"02" 1978 "18" 24
我尝试了一些类似
的方法proc sql;
CREATE TABLE output_tablename as
SELECT DISTINCT id, year, parent_id, min(age) as age
FROM input_tablename
GROUPBY id;
quit;
无济于事。
您可以使用 HAVING 子句只选择年龄 = min(age) 的记录。
proc sql;
create table want as
select * from have
group by ID
having age=min(age);
quit;
PROC 排序选项:
proc sort data=have; by id descending age;
run;
proc sort data=have nodupkey out=want;
by id;
run;