SAS proc sql - 如何读取变量日志但保留变量标签
SAS proc sql - how to read in log of variable but retain the variable's label
我正在使用 proc sql 从几个不同的数据集中读取变量,我正在努力改进它。
我想做的是使用 proc sql 从数据集中读取变量,但在读取变量时记录变量的日志,但保留变量名称。
PROC SQL;
CREATE TABLE all AS
SELECT DISTINCT a.*,
b.var1, LOG(b.var2) AS log_var2
FROM pop AS a
INNER JOIN trt AS b
ON a.study=b.study AND a.subj=b.subj
;
QUIT;
上面用变量 log_var2 创建了一个 table,但它没有来自 var2 的变量名。有没有办法保留这个?这个想法是标签稍后在转置时使用,标签用作 table 中的值,但 var2 本身可能会更改,因此我需要一种使用标签名称标记 log_var2 的可靠方法var2.
有什么想法吗?
提前致谢
PROC SQL;
CREATE TABLE all AS
SELECT DISTINCT a.*,
b.var1, LOG(b.var2) AS var2
FROM pop AS a
INNER JOIN trt AS b
ON a.study=b.study AND a.subj=b.subj;
QUIT;
这样你就可以进行日志操作,return 将值赋给一个名为 var2 的变量。还是我误解了你的情况?
如果你想要特定的标签,你可以
log(b.var2) as var2 label=" you named it"
据我所知,在 proc sql
中没有办法自动保留变量标签。不幸的是,您无权访问 vlabel
等功能,即使您访问了,使用它们的时间也是错误的。
除了像 yukclam9 显示的那样手动定义标签,您 可以 使用变量信息函数获取该值,或者可能更容易地预先在数据步骤中获取。如果您不想在程序中对值进行硬编码,这会很方便。
data _null_;
set trt;
vlabel_Var2 = vlabel(var2); *assign value to a variable;
call symputx('vlabel_var2',vlabel_var2); *assign to macro variable;
stop; *only process one line;
run;
proc sql;
CREATE TABLE all AS
SELECT DISTINCT a.*,
b.var1, LOG(b.var2) AS log_var2 label="Log of &vlabel_var2."
FROM pop AS a
INNER JOIN trt AS b
ON a.study=b.study AND a.subj=b.subj
;
QUIT;
如果你想要 只是 原始标签,你当然可以去掉 "Log of" 部分,它只是为了表明你也可以添加它。
我正在使用 proc sql 从几个不同的数据集中读取变量,我正在努力改进它。
我想做的是使用 proc sql 从数据集中读取变量,但在读取变量时记录变量的日志,但保留变量名称。
PROC SQL;
CREATE TABLE all AS
SELECT DISTINCT a.*,
b.var1, LOG(b.var2) AS log_var2
FROM pop AS a
INNER JOIN trt AS b
ON a.study=b.study AND a.subj=b.subj
;
QUIT;
上面用变量 log_var2 创建了一个 table,但它没有来自 var2 的变量名。有没有办法保留这个?这个想法是标签稍后在转置时使用,标签用作 table 中的值,但 var2 本身可能会更改,因此我需要一种使用标签名称标记 log_var2 的可靠方法var2.
有什么想法吗?
提前致谢
PROC SQL;
CREATE TABLE all AS
SELECT DISTINCT a.*,
b.var1, LOG(b.var2) AS var2
FROM pop AS a
INNER JOIN trt AS b
ON a.study=b.study AND a.subj=b.subj;
QUIT;
这样你就可以进行日志操作,return 将值赋给一个名为 var2 的变量。还是我误解了你的情况?
如果你想要特定的标签,你可以
log(b.var2) as var2 label=" you named it"
据我所知,在 proc sql
中没有办法自动保留变量标签。不幸的是,您无权访问 vlabel
等功能,即使您访问了,使用它们的时间也是错误的。
除了像 yukclam9 显示的那样手动定义标签,您 可以 使用变量信息函数获取该值,或者可能更容易地预先在数据步骤中获取。如果您不想在程序中对值进行硬编码,这会很方便。
data _null_;
set trt;
vlabel_Var2 = vlabel(var2); *assign value to a variable;
call symputx('vlabel_var2',vlabel_var2); *assign to macro variable;
stop; *only process one line;
run;
proc sql;
CREATE TABLE all AS
SELECT DISTINCT a.*,
b.var1, LOG(b.var2) AS log_var2 label="Log of &vlabel_var2."
FROM pop AS a
INNER JOIN trt AS b
ON a.study=b.study AND a.subj=b.subj
;
QUIT;
如果你想要 只是 原始标签,你当然可以去掉 "Log of" 部分,它只是为了表明你也可以添加它。