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" 部分,它只是为了表明你也可以添加它。