【问题标题】:Adding a new Column to existing SAS dataset向现有 SAS 数据集添加新列
【发布时间】:2016-08-11 10:03:19
【问题描述】:

我有一个通过读取 .txt 文件创建的 SAS 数据集。它大约有 20-25 行,我想添加一个新列,为每一行按顺序分配一个字母。

第 1 行 A

第 2 行 B

第 3 行 C .......

这听起来像是一个非常基本的问题,应该有一个简单的解决方案,但不幸的是,我无法在任何地方找到这个问题。我得到了添加新计算列等的解决方案,但就我而言,我只想在现有数据表中添加一个新列 - 变量之间没有其他关系。

【问题讨论】:

  • 我在考虑的选项只是创建一个新表,比如 new_table,它具有相同的行数,并且只有一个包含我的数据的列。在此之后,使用完整的外部连接(或类似的东西)将两者水平组合。我不确定这会奏效,即使那样,我也会欣赏一种更优雅的方法。

标签: sas


【解决方案1】:

这有点难看,如果您的行数超过 26 行,它将开始使用随机 ascii 字符。但它确实解决了问题所定义的问题。

测试数据:

data have;
  do row = 1 to 26;
    output;
  end;
run;

说明:

在我的计算机上,字母“A”位于 ASCII 表 (YMMV) 中的第 65 位。我们可以使用以下代码来确定这一点:

data _null_;
  pos = rank('A');
  put pos=;
run;

ASCII 表将按顺序定位字母表,因此B 将位于位置66(如果A 位于65 等处)。

byte() 函数从 ASCII 表中的某个位置返回一个字符。我们可以利用 ASCII 字符 A 的位置作为偏移量,减去 1,然后添加行号 (_n_) 来利用这一点。

最终解决方案:

data want;
  set have;      
  alphabet = byte(rank('A')-1 + _n_);
run;

【讨论】:

  • 这看起来很有希望!是的,我只有大约 20 行,所以应该不是问题。马上调查这件事。谢谢
【解决方案2】:

不比汤姆的好,但本质上是蛮力替代品。创建 Alpha 字符串,然后使用 CHAR() 来识别感兴趣的字符。

data want;
  set sashelp.class;
  retain string 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  letter = char(string, _n_);
run;

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多