【问题标题】:SAS proc sql - how to read in log of variable but retain the variable's labelSAS proc sql - 如何读取变量日志但保留变量的标签
【发布时间】:2015-06-09 15:26:34
【问题描述】:

我正在使用 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。

有什么想法吗?

提前致谢

【问题讨论】:

  • 澄清一下:我很确定你想要来自 var2 的 variable label。变量标签是您打开数据集时默认的样子,但可以与 variable name 不同,后者是您在程序中用来引用它的名称。

标签: sql sas label


【解决方案1】:

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

如果您想要只是原始标签,您当然可以保留“日志”部分,它只是为了表明您也可以添加它。

【讨论】:

  • 谢谢,所以看起来没有办法将标签保留在 proc sql 步骤中,但是宏变量可以工作,谢谢。
【解决方案2】:
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"

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多