Как добавить возврат каретки в коде SAS? - PullRequest
3 голосов
/ 24 марта 2011

Я хочу добавить возврат каретки \ linebreak \ linefeed к коду SAS, чтобы в выходном xml были возвраты.

data test_JK_merge;
    length body $ 1500;
    set test_JK;
    body=strip(termEntry_st)||"
"||strip(TS_Status)||strip(langset_en_st)||strip(nttG)||strip(langset_en_ed)||strip(termEntry_ed);
    /*merged=strip(termEntry_st)||"'0A'X"||strip(TS_Status)||"<br />"||strip(langset_en_st)||"<br />"||strip(nttG)||"<br />"||strip(langset_en_ed)||"<br />"||strip(termEntry_ed);*/
    keep body;
run;

libname outxml xml "U:\Projects\...\test2.mtf.xml";

data outxml.text;
    set test_JK_merge;
run;

Я пробовал разные способы, такие как , 'OA'X,
и т. д. Но никто из них не работал. Кто-нибудь может помочь?

Фактический результат:

<TEXT>
  <body><termEntry id=1>&#13;<note type="TS_Status">ELC TERM present in OCS_Help_xml OCS_properties</note><langSet lang="eng-us">ntig><termGrp><term>ARM</term></termGrp></ntig></langSet></termEntry></body> 
 </TEXT>

Ожидаемый результат:

    <TEXT>
      <body><termEntry id=1>
<note type="TS_Status">ELC TERM present in OCS_Help_xml OCS_properties</note><langSet lang="eng-us">ntig><termGrp><term>ARM</term></termGrp></ntig></langSet></termEntry></body> 
     </TEXT>

1 Ответ

3 голосов
/ 24 марта 2011

Я на самом деле немного удивлен, что вы получаете

<body><termEntry ...

с использованием LIBNAME XML. Я могу быть склонен генерировать XML вручную из шага DATA.

LIBNAME XML с style = generic (по умолчанию) будет выводить форму

<dsname>
   <columnname>column value</columnname>
</dsname>
<dsname>
   <columnname>column value</columnname>
</dsname>
..etc...

т. Е. Один тег <dsname> для каждой записи во входном файле с тегом под ним для каждой переменной в наборе данных. Для того, чтобы SAS мог затем прочитать результат обратно, в нем будет отсутствовать любое значение, поэтому, если переменная в наборе данных является строкой и содержит какой-либо из символов <, & и т. Д., Это не "запутает" XML. Так что в вашем случае, где переменная в наборе данных имеет значение что-то вроде

<termEntry id=1>...</termEntry>

тогда я ожидаю, что вывод из libname XML будет выглядеть примерно так:

<TEXT>
    <body> &lt;termEntry id=1&gt;&lt;/termEntry&gt; </body>
</TEXT

Варианты, по-видимому, заключаются либо в том, чтобы понять, как использовать XMLMap с LIBNAME XML для генерации желаемого XML (может быть невозможно в зависимости от используемой версии SAS), либо в генерации XML вручную с использованием DATA шаг:

data test_JK;
    termEntry_st = "<termEntry id=1>";
    termEntry_ed = "</termEntry>";
    TS_Status = "<note type='TS_Status'>ELC TERM present in OCS_Help_xml OCS_properties</note>";
    langset_en_st = "<langSet lang='eng-us'>";
    langset_en_ed = "</langSet>";
    nttG = "<ntig><termGrp><term>ARM</term></termGrp></ntig>";

data _null_;
    set test_JK end=e;
    file "tmp.xml";

    if _n_ eq 1 then do;
       put "<something>";
    end;

    put "  <text>";
    put "    <body>" +(-1) termEntry_st;
    put TS_Status +(-1) langset_en_st +(-1) nttG +(-1) langset_en_ed +(-1) termEntry_ed  + (-1) "</body>";
    put "  </text>";

    if e then do;
       put "</something>";
    end;
 run;
...