我正在使用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。
有什么想法吗?
提前致谢
答案 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"