SAS proc sql - 如何读取变量的日志但保留变量的标签

时间:2015-06-09 15:26:34

标签: sql sas 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的表,但它没有var2中的变量名。有没有办法保持这个?这个想法是后来在转置时使用标签,标签用作表中的值,但var2本身可能会改变,因此我需要一个强大的方法,用var2中的标签名称标记log_var2。

有什么想法吗?

提前致谢

2 个答案:

答案 0 :(得分:4)

据我所知,没有办法在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;

你当然可以保留"记录"如果你想只是原始标签,那么它只是包含在内,以表明你也可以添加它。

答案 1 :(得分:1)

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;

由此您将执行日志操作并将值返回到名为var2的变量。还是我误解了你的情况?

如果你想要标签,你可以做

log(b.var2) as var2 label=" you named it"