gpt4 book ai didi

sas - 根据包含代码簿的单独数据集中的变量更改一个数据集中的 SAS 变量标签/属性 - PROC SQL?处理数据集?

转载 作者:行者123 更新时间:2023-12-05 09:28:42 25 4
gpt4 key购买 nike

我的问题的核心是——我可以使用 PROC SQL、PROC DATASETS 或其他命令直接修改一个数据集的元数据,基于另一个数据集中的数据吗?如果是,您能否告诉我更多关于使用什么代码或使用什么搜索词来尝试解决这个问题的信息?

这是背景和细节——我定期收到一个研究伙伴的研究结果数据导出(Excel),他们还给我提供了一个Excel格式的密码本。结果数据文件总是包含相同的字段,但它们的数据表需要大量清理。我需要开发一个过程,将结果数据转换为可用的 SAS 数据集,包括标记变量和将创建和应用用户定义格式的语法文件。我想尽可能高效地执行此操作。理想情况下,我希望 SAS 根据码本数据集中的变量名称 * 变量标签组合更改结果数据集中的元数据/变量属性(特别是标签)。正如我所见,这样做的一种方法是将两个 Excel 文件导入 SAS,然后使用连接函数以新字符变量的形式编写语法,然后在数据步骤中使用该新变量的文本在结果数据集上运行的语法。具体来说:

*Use concatenate function to create variable containing syntax text;
data codebook_edit;
set codebook;
format Syntax_Label $2000.;
Syntax_Label=cat("label ", trim(Field_Name), " = '", trim(Field_Label), "';");
run;

然后这会生成一个字符变量,其中包含如下所示的行:

label race = 'Race Ethnicity';
label sex = 'Sex assigned at birth';
label gender = 'Gender identity';

然后我会运行这个:

*Get syntax to label vars;
proc print data=codebook_edit noobs;
var Syntax_Label;
run;
*Apply labels;
data results_edit;
set results;
label race = 'Race Ethnicity';
label sex = 'Sex assigned at birth';
label gender = 'Gender identity';
run;

但是,我想知道是否有更好的方法来执行此操作,因为我有数百个变量并且不想创建这么长的语法文件。例如,我可以使用 PROC SQL 或 PROC DATASETS 或其他命令直接修改研究结果数据集中的元数据,基于代码簿中的数据,如果可以,您能提供一些提示吗?谢谢

最佳答案

使用元数据编写代码。因此,如果您的元数据数据集名为 CODEBOOK,并且有名为 FIELD_NAME 和 FIELD_LABEL 的变量,那么您可以像这样编写 LABEL 语句:

filename code temp;
data _null_;
set codebook end=eof;
file code;
if _n_=1 then put 'label';
put @3 field_name '=' field_label :$quote. ;
if eof then put ';' ;
end;

然后您可以使用 %INCLUDE 将该标签语句添加到您要运行它的位置。例如作为 PROC DATASETS 步骤的一部分。因此,如果您要添加标签的数据集在 MYLIB 库中称为 MYDATA,则运行此 PROC 步骤。

proc datasets lib=mylib nolist;
modify mydata ;
%include code / source2;
run;
quit;

您可以对您可能想要进行的其他更改使用类似的代码生成。

关于sas - 根据包含代码簿的单独数据集中的变量更改一个数据集中的 SAS 变量标签/属性 - PROC SQL?处理数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71164296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com