Proc SQL中如何将变量及连接表永久保存至数据集?
问题解决方案
1. 将DepressedState永久保存至phsc524.nacc1
你的DepressedState基于每个个体的最大抑郁值(MaxDepPerPerson中的Depressed)生成,要把这个变量加入原永久数据集phsc524.nacc1,可通过以下两种方案实现:
方案1:创建含新变量的表替换原表(更稳妥,避免锁表)
先生成包含原所有字段+DepressedState的新表,再替换原表**(执行前建议备份原数据集)**:
proc sql; /* 计算每个个体的最大抑郁值 */ create table MaxDepPerPerson as select NACCID, max(DEPRESSION) as Depressed from phsc524.nacc1 group by NACCID; /* 生成包含DepressedState的完整数据集 */ create table phsc524.nacc1_new as select a.*, case b.Depressed when 1 then '1' when 0 then '0' else '4' end as DepressedState from phsc524.nacc1 as a left join MaxDepPerPerson as b on a.NACCID = b.NACCID; /* 替换原表(需确保有修改权限) */ drop table phsc524.nacc1; rename phsc524.nacc1_new = nacc1; quit;
方案2:直接更新原表(适合小型数据集)
如果数据集不大,可直接用UPDATE语句添加变量**(需确保原表未被锁定)**:
proc sql; create table MaxDepPerPerson as select NACCID, max(DEPRESSION) as Depressed from phsc524.nacc1 group by NACCID; /* 给原表添加DepressedState字段 */ alter table phsc524.nacc1 add DepressedState char(1); /* 更新字段值 */ update phsc524.nacc1 as a set DepressedState = ( select case Depressed when 1 then '1' when 0 then '0' else '4' end from MaxDepPerPerson as b where b.NACCID = a.NACCID ); quit;
2. 永久保存SQL连接生成的表
完全可以。只需在连接查询的SELECT语句前加上CREATE TABLE 库名.表名 AS,即可将连接结果保存为永久表。例如,把你代码中的右连接结果保存为phsc524.Dementia_Depression_Join:
proc sql; create table MaxDepPerPerson as select NACCID, max(DEPRESSION) as Depressed from phsc524.nacc1 group by NACCID; /* 永久保存连接生成的表 */ create table phsc524.Dementia_Depression_Join as select a.NACCID, a.NACCVNUM, a.NACCUDSD, a.NACCALZD, b.Depressed from phsc524.nacc1 as a right join MaxDepPerPerson as b on (a.NACCVNUM = 1 and a.NACCUDSD = "Dementia" and a.NACCALZD =1 and b.NACCID = a.NACCID); /* 基于永久表完成后续统计 */ select count(NACCID) as number_ofpatients, DepressedState from ( select NACCID, case Depressed when 1 then '1' when 0 then '0' else '4' end as DepressedState from phsc524.Dementia_Depression_Join ) group by DepressedState; quit;
关于PROC SQL SELECT INTO的适用性
SELECT INTO的作用是将查询结果赋值给宏变量(比如单个值或多个值存入宏变量列表),无法实现将变量保存到数据集的需求,因此完全不适用当前场景。你的需求需要用CREATE TABLE或UPDATE/ALTER TABLE来实现。
内容的提问来源于stack exchange,提问作者yrshen84
相关产品推荐
相关产品推荐

