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

标签 sas metadata data-manipulation data-cleaning proc-sql

我的问题的核心是——我可以使用 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/

相关文章:

sas - Proc 制表 rowpctn 单独列百分比

r - 分割样本设计

r - 如何使用 mutate() 生成依赖于其他新变量的前一行值的变量?

sql - union all对应和outer union对应有什么区别?

error-handling - 我可以在第一个错误时停止提交的报表吗?

sas - 使用 PROC EXPORT 时,如何阻止 SAS 向每个字符串变量添加额外的空字节?

javascript - 在上传期间向 GridFS Meteor FS 文件添加自定义属性

java - 如何用 Java (ID3) 编辑 MP3 文件?

单独端口而非 SSL 上的 WCF 元数据

r - 比较如果条件满足,则重置序列的有效方法( R )