SAS Data步骤免费格式问题

时间:2016-06-16 12:43:51

标签: regex sas datastep

我想在关键字'data-base-url'之前添加换行符,只有当它没有。

输入文件

    </html>
    <et1>
    <a data-linked-resource-type="userinfo" data-base-url="https://url.com/c">USERNAME 1</a>
    <td class="conTd">
    INFO 1
    </td>
    </et1>

    <et2>
    <a data-linked-resource-type="userinfo" 

    data-base-url="https://url.com/c1">USERNAME 2</a>
    <td class="conTd">
    INFO 2
    </td>
    </et2>

    <et3>
    <a data-linked-resource-type="userinfo" 
    data-base-url=
    "https://url.com/c2">USERNAME 3</a>
    <td class="conTd">
    INFO 3
    </td>
    </et3>
    </html>
    /* data program */
    data inp;
    infile "c:/tmp/output.txt";
    input @'data-base-url=' user_info $30000. 
    @'<td class="conTd">' details $30000.;
    run;
    /* data program ends */

et3标签是必需的模式。如果为输入文件运行上述程序,则只会将et3标记正确转换为user_info和details列,但我希望在前两个标记中包含换行符以获得所需的输出。提前致谢。

此致 AKS

1 个答案:

答案 0 :(得分:1)

以下是我的解决方案,它基于您的输出数据集inp,而不是您自己的问题,因为此解决方案无需修改您的输入文件。

基本上,您将输入文件的每一行都读作单个SAS行并从那里操作数据。以您的方便修改记录长度。

  data inp;
    infile "/sascr/user/me/output.txt" truncover lrecl=200;
    input string $200. ;
    lstr = lag(string);
    if lstr='<td class="conTd">' then details = string;
    if string='<td class="conTd">' then _info = lstr;
    user_info = scan(lag(_info),-1,'=');
    if length(strip(details))>1 then output;
    keep details user_info;
 run;

希望得到这个帮助。