在 SAS 中,如何将新创建的列保存在 table 中?

In SAS, how do I save my newly created columns in a table?

我是 SAS 编程新手。我有一个名为 cohort_sc 的 table,其中列 MRN 存储为带前导零的字符。为了删除前导零,我将其转换为 int 并返回到字符。但是,当我 运行 之后的任何其他代码时,两个新列 mrn_int 和 mrn_char 不再存储在 cohort_sc 中。如何保存新列?

data cohort_sc;
set cohort_sc;
MRN_INT = INPUT(MRN,best.); 
MRN_char = PUT(MRN_INT,12.); 
set cohort_sc;
run;

不要覆盖您现有的数据集。这将使您在出错时难以调试,因为您必须重新创建原始数据集才能重试。

您的代码应该可以工作,但您可能希望确保新变量按照您的需要定义,而不是强制 SAS 猜测您要如何定义它们。

请注意,BEST 是 FORMAT 的名称,而不是 INFORMAT。 INPUT() 函数不关心信息格式的宽度是否大于您正在读取的字符串的长度,因此只需使用 32. 作为信息格式,因为这是它可以读取的最大字符数。

12. 格式将右对齐数字字符串。您真的要在新的 MRN_CHAR 变量中使用前导空格吗?

data new_cohort_sc;
  set cohort_sc;
  length MRN_INT 8 MRN_char  ;
  MRN_INT = INPUT(MRN,32.); 
  MRN_char = left(PUT(MRN_INT,12.)); 
run;

您可以通过使用 VERIFY() 函数查找现有 MRN 变量中第一个不是“0”的字符的位置,而无需生成数值。

data new_cohort_sc;
  set cohort_sc;
  length MRN_char  ;
  MRN_char = substr(MRN,max(1,verify(MRN,'0')));
run;