SAS - 使用另一列中的值动态创建列名称

2023-12-29

我有一列包含许多从 XML 解析器解析的标志。数据如下:

USERKEYED=Y;VALMATCH=N;DEVICEVERIFIED=N;EXCEPTION=N;USERREGISTRD=N;ASSOCIATE=Y;EXTERNAL=N;GROSSGIVEN=Y;UMAPPED=N;

我必须创建一个包含所有这些列名的表来捕获标志。喜欢:

USERKEYED VALMATCH DEVICEVERIFIED EXCEPTION USERREGISTRD ASSOCIATE EXTERNAL GROSSGIVEN UMAPPED 
Y  N N N N Y N Y N 
Y  N N N N Y Y Y N 
Y  N N Y N Y N Y N 

如何在 SAS 中动态捕获值?在 DATA 步骤还是 PROC 步骤中?

提前致谢。


让我们从示例输出数据开始。

data expect ;
  id+1;
  length USERKEYED VALMATCH DEVICEVERIFIED EXCEPTION 
         USERREGISTRD ASSOCIATE EXTERNAL GROSSGIVEN UMAPPED $1 ;
  input USERKEYED -- UMAPPED;
cards4;
Y  N N N N Y N Y N 
Y  N N N N Y Y Y N 
Y  N N Y N Y N Y N 
;;;;

现在我们可以重新创建您的示例输入数据:

data have ;
  do until (last.id);
    set expect ;
    by id ;
    array flag _character_;
    length string $200 ;
    do _n_=1 to dim(flag);
      string=catx(';',string,catx('=',vname(flag(_n_)),flag(_n_)));
    end;
  end;
  keep id string;
run;

看起来像这样:

USERKEYED=Y;VALMATCH=N;DEVICEVERIFIED=N;EXCEPTION=N;USERREGISTRD=N;ASSOCIATE=Y;EXTERNAL=N;GROSSGIVEN=Y;UMAPPED=N 
USERKEYED=Y;VALMATCH=N;DEVICEVERIFIED=N;EXCEPTION=N;USERREGISTRD=N;ASSOCIATE=Y;EXTERNAL=Y;GROSSGIVEN=Y;UMAPPED=N 
USERKEYED=Y;VALMATCH=N;DEVICEVERIFIED=N;EXCEPTION=Y;USERREGISTRD=N;ASSOCIATE=Y;EXTERNAL=N;GROSSGIVEN=Y;UMAPPED=N 

因此,为了处理这个问题,我们需要从变量中解析出对STRING分成多个观察值,各个对的值分为NAME and VALUE变量。

data middle ;
  set have ;
  do _n_=1 by 1 while(_n_=1 or scan(string,_n_,';')^=' ');
    length name $32 ;
    name = scan(scan(string,_n_,';'),1,'=');
    value = scan(scan(string,_n_,';'),2,'=');
    output;
  end;
  keep id name value ;
run;

然后我们可以使用PROC TRANSPOSE将这些观察结果转换为变量。

proc transpose data=middle out=want (drop=_name_) ;
  by id;
  id name ;
  var value ;
run;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SAS - 使用另一列中的值动态创建列名称 的相关文章

  • Hadoop 与 SAS 的连接

    我想使用 SAS ACESS 9 3M2 接口将 SAS 与我的 Hive 连接 我的问题是 sas是否将hive立方体导入到sas环境中并在那里查询 或者 为了报告的目的 它再次访问 hive 以便它运行 MR 这将我的报告性能降低到 2
  • SAS 我可以逆向进行 sas 过程观察吗

    我知道Sas在处理时从数据集顶部的观察开始 然后继续进行下一个直到到达底部观察 但是有没有一种简单的方法可以让sas首先处理底部观察 然后再处理到顶部 您可以使用nobs and point向后处理它 而无需执行任何中间步骤 这是一个例子
  • 在SAS中运行程序的热键?

    我知道在 R 中我可以使用 control r 来运行我的程序代码 我想知道 SAS 中是否有等效的热键 如果没有 有没有办法将其 编程 到 SAS 中 运行 提交程序 的默认热键是 F8 键 如果您使用的是 Base SAS 不是 EG
  • 选择数据步骤中具有最大值的观测值

    Table old date 05DEC2016 a 28NOV2016 b 22DEC2016 c 23JAN2017 d 12JAN2017 e 09JAN2017 f 25DEC2016 g 我需要创建一个新表 data new se
  • SAS 替换所有列中的字符

    我有一个 SAS 数据集 必须导出到 csv 文件 我有以下两个相互矛盾的要求 我必须使用分号作为 csv 文件中的分隔符 一些字符变量是从公式中手动输入的字符串 因此它们可能包含分号 我对上述问题的解决方案是转义分号或用逗号替换它 我怎样
  • SAS HashTable 中由 hashexp 指定的表大小到底是多少?

    我想对 SAS 哈希表中存储桶的定义进行一些澄清 问题正是关于hashexp范围 根据 SAS DOC 的说法 hashexp is 哈希对象的内表大小 其中哈希表的大小为2n HASHEXP 的值用作 2 的指数来创建哈希表大小 例如 H
  • 在SAS中使用循环重命名索引列?

    我有一个数据集 其中变量为 col1 col2 col3 col15 我想将它们重命名为new1 new2 new3 new 15 我可以写15次类似的rename col1 new1 在 SAS 中 但如何使用循环实现此目的 谢谢 首先
  • 在双边案例交叉设计中创建控制日期

    我计划研究空气污染对急诊室就诊的影响 并打算使用双边病例交叉设计 对于每个病例 医院就诊 我想创建 4 个控制日期 就诊前后 7 天和 14 天 例如 如果一个人于 2012 年 9 月 10 日访问诊所 我的控制日期将为 8 月 27 日
  • SAS 数据合并以求存在

    我是 sas 新手 我有两个数据集如下 data datasetA input a 1 datalines 1 2 3 4 5 6 7 run data datasetB input a 1 datalines 1 3 5 7 run 如果
  • 从 .Net 中的 SAS 数据源读取数据

    我被要求在 ASP Net 应用程序中从 SAS 读取一些数据 我有 Windows 窗体应用程序的工作代码 然而相同的代码doesn t在 ASP Net 中工作 但我可以尝试一下 具有相同引用的干净项目始终会失败 这是我所得到的连接 S
  • 当我将 SAS 数据集导出到 csv 时;它正在修剪字符中的所有前导空格

    当我将 SAS 数据集导出到 csv 时 它正在修剪字符中的所有前导空格 请帮助我保留 csv 输出中的所有前导空格 使用的语句是 Proc Export Data Globl Mth Sumry OutFile GMUPath 20 Rp
  • SAS 中的“auto.arima”?

    我曾经使用 auto arima 在 R 中运行 arima 模型来识别适合数据的最佳 arima 模型 即使没有它 在 R 中编写一个函数来执行类似的任务也很容易 然而 我这几天google了一下 在SAS中找不到类似的过程 有谁知道SA
  • 使用 COMMAw,d 转换数字

    我正在关注SAS 帮助页面 http support sas com documentation cdl en lrdict 64316 HTML default viewer htm a000200667 htm并试图获得与页面底部示例相
  • SAS SQL 传递

    我想知道在这段代码中 SAS SQL 传递中首先执行的是什么 Connect To OLEDB As MYDB DBConnect Catalog MYDB Create table MYDB extract as select put P
  • SAS:如何计算除某些字符变量之外的所有字符变量的频率

    我知道我可以使用类似以下内容来计算所有字符的频率 proc freq data sashelp class tables char run 但是 有没有办法排除一些变量呢 我想做类似的事情 proc freq data sashelp cl
  • 如何读取从 Access 导入的 SAS 数据集(不符合 SAS 命名约定)

    我已使用 Libname 将 Access DB 导入 SAS 库名称 accdb c mydata base accdb DB 中的所有表现在都在 accdb 库中 但 Access DB 中的表名称与 SAS 数据集命名约定不匹配 我的
  • 在从一个表中提取的循环内调用执行以执行宏

    我目前有以下情况 macro sqlloop event id lots of code mostly proc sql segments mend 生成一个输出表 名为export table2 我需要能够为另一个表 名为 vars 中的
  • 在新实例中打开 SAS 程序

    我正在尝试找出一种在单击时默认在增强编辑器的新实例中打开 SAS 程序的方法 问题是asked https stackoverflow com questions 4654876 open sas program in new window
  • Office 2010 中的 SAS DDE 问题

    当我运行 Office 2007 时 我的 SAS DDE 脚本可以很好地填充 保存并关闭 Excel 文件 我最近更新到 Office 2010 总体工作正常 但 Excel 在保存对话框中停止 我必须手动单击 保存 而以前我不需要这样做
  • SAS:将字符转换为数字变量 - 逗号作为小数分隔符

    我正在尝试使用INPUT函数 正如总是建议的那样 但 SAS 似乎在正确解释金额方面存在一些问题 例如 2 30 1 61 0 00 我最终得到了缺失值 也许是由于逗号是 SAS 的千位分隔符造成的 data temp old 1 61 n

随机推荐