SAS / Excel - 展开包含Alt +进入行的单个单元格

时间:2016-12-27 17:40:11

标签: excel import sas import-from-excel

(SAS初学者,一些SQL和一些Excel经验(无VBA))

我有一个场景,我希望将Excel中的数据字典分解为SAS数据。数据字典包含一个单元格中的Alt + Enters(换行符),我希望将其划分为单独的行。

我的工具:

  • Windows 7上的SAS 9.4
  • Excel 2010

实际Excel数据(使用Alt + Enter):

Variable     | Cell
Name         | Value
-------------------------
Var1         | Val1 = abc     <- there is an Alt+Enter
             | Val2 = def     <- there is an Alt+Enter
             | Val3 = ghi
-------------------------
Var2         | Val1 = jkl     <- there is an Alt+Enter
             | Val2 = mno
-------------------------
Var3         |
-------------------------
Var4         | Words

我希望我的最终数据(在SAS中)看起来像:

Variable     | Var      | Var
Name         | Code     | Value
-------------------------------
Var1         | Val1     | abc
Var1         | Val2     | def
Var1         | Val3     | ghi
-------------------------------
Var2         | Val1     | jkl
Var2         | Val2     | mno
-------------------------------
Var3         |          |
-------------------------------
Var4         | Words    |

在这种情况下,我发现我需要:

  1. 在单元格中使用Excel换行符(Alt + Enter)作为 分隔符(行?)
  2. 使用等号(=)作为分隔符
  3. 扩展数据值时维护变量名称
  4. 注意:

    • 原始单元格值中可能有空白值
    • 原始单元格值中可能存在没有等号(=)的值

    寻找有关执行此操作的最佳方式的建议(例如,只需将Excel文件导入SAS,并在SAS工具中使用它)。

    这是我将Excel电子表格带入SAS的当前数据导入步骤:

    PROC IMPORT datafile="filepath" dbms=xlsx out=temp REPLACE;
    RANGE="SheetName$A1:B";
    DATAROW=2;
    RUN;
    

1 个答案:

答案 0 :(得分:0)

Excel会在按下Alt-Enter的位置放置一个回车符。

data want ;
  set temp;
  do i=1 to countw(cellvalue,'0d'x);
    varcode = scan(cellvalue,i,'0d'x);
    varvalue = scan(varcode,2,'=');
    varcode = scan(varcode,1,'=');
    output;
  end;
run;