【问题标题】:Identifying CharacterStrings with Arrays and Index Function SAS用数组和索引函数 SAS 识别字符串
【发布时间】:2016-12-14 14:14:42
【问题描述】:

我的数据集中有几个(确切地说是 55 个)变量是大块文本。这些变量包含某些医疗程序的结果。

我正在尝试将索引函数与 SAS 中的数组结合使用,以识别在 55 个结果变量中的一个或多个中存在某些关键词的观察结果。例如,出现“REPAIR”这个词的地方。

data c1;
set c; 

  array res  results1-results55; 

  array outres _numeric_; 

      do i= 1 to dim(outres);

      outres(i) = index(res(i), "REPAIR");

      end; 

  run; 

当只有一个变量被索引时,我可以让我的代码工作;但是,当尝试使用数组查看单词“REPAIR”的所有 55 个结果变量时,它会中断。我收到以下错误:

         ERROR: Array subscript out of range at line 1338 column 19.

关于如何调试这个有什么想法吗?

谢谢!

【问题讨论】:

  • 是不是需要为outres数组指定维度? dim(outres) 的结果是什么?
  • 我认为可能是这样。但我不确定外部尺寸大小可能是多少。
  • 啊哈!是的,一旦我指定了创建 res1-res55 的 outres,它似乎至少在一开始就可以工作。一目了然。

标签: arrays string indexing sas


【解决方案1】:

您要求 SAS 从所有现有数值变量中创建数组 OUTRES。这些数量可能与您分配给 RES 数组的 55 个变量不匹配。

如果您希望 SAS 创建新变量,那么您通常要么列出它们,要么至少告诉 SAS 应该有多少。以下是一些应该可行的示例。

array outres outres1-outres55 ;
array outres(55) ;

【讨论】:

    【解决方案2】:

    尝试改变

     array outres _numeric_; 
    

    array outres[*] _numeric_; 
    

    【讨论】:

    • 嗨,D.O.,我按照建议的数据 c1 运行代码;设置 c;数组 res results1-results55;数组 outres[*] 数字; ;做 i=1 到暗淡(res); outres(i) = index(res(i), "修复");结尾;跑;但是输出 Obs repair i 1 0 56 2 0 56 3 1 56 4 0 56 5 0 56 6 0 56 7 0 56 8 0 56 9 0 56 10 0 56 只创建了一个 res 变量,而不是应该创建的许多变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2022-01-11
    • 2017-12-19
    相关资源
    最近更新 更多