Использование кода JavaScript + D3 3.x в SAS для создания HTML вывода - PullRequest
0 голосов
/ 09 января 2020

Я столкнулся с проблемой при выполнении кода здесь: https://jsfiddle.net/zwk29rcs/1/ в SAS EG. Код в ссылке создает диаграмму Санки, используя JavaScript и D3 3.x, и хочет использовать SAS EG для создания той же диаграммы для внутренних данных.

Я пытался использовать PRO C STREAM & PRO C TEMPLATE, но он генерировал пустой HTML вывод.

Буду очень признателен, если вы поможете мне в этом проекте.

Спасибо!

Код входных данных для jsfiddle:

var data = [{
    "source": "A",
        "target": "X",
        "value": 5
}, {
    "source": "A",
        "target": "Y",
        "value": 7
}, {
    "source": "A",
        "target": "Z",
        "value": 6
}, {
    "source": "B",
        "target": "X",
        "value": 2
}, {
    "source": "B",
        "target": "Y",
        "value": 9
}, {
    "source": "B",
        "target": "Z",
        "value": 4
}, {
    "source": "X",
        "target": "L",
        "value": 5
}
];

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Вам действительно нужно отформатировать его в таком трудно читаемом стиле?

В любом случае, это легко сгенерировать с помощью шага данных.

Поскольку вы не показали, какие данные у вас есть в SAS, которые вы пытаетесь передать, давайте создадим набор данных, который будет выглядеть как данные в коде javascript, который вы опубликовали, поэтому у нас есть кое-что для программирования.

data have ;
  input source $ target $ value ;
cards;
A X 5
A Y 7
A Z 6
B X 2
B Y 9
B Z 4
X L 5
;

Вот код шага данных для генерации этих данных в нужном вам стиле json.

filename test temp;
data _null_;
  file test;
  set have end=eof;
  format _character_ $quote. ;
  if _n_=1 then put 'var data =' / '[' @;
  else put ',' @;
  put '{"source": ' source ',"target": ' target ',"value": ' value '}' ;
  if eof then put '];';
run;

Результат:

var data =
[{"source": "A" ,"target": "X" ,"value": 5 }
,{"source": "A" ,"target": "Y" ,"value": 7 }
,{"source": "A" ,"target": "Z" ,"value": 6 }
,{"source": "B" ,"target": "X" ,"value": 2 }
,{"source": "B" ,"target": "Y" ,"value": 9 }
,{"source": "B" ,"target": "Z" ,"value": 4 }
,{"source": "X" ,"target": "L" ,"value": 5 }
];

Это должно Не так сложно направить этот вывод в нужное вам место. Также нетрудно обобщить метод для вывода любого набора данных, особенно если имена переменных набора данных совпадают с именами, которые вы хотите использовать в полях json.

0 голосов
/ 10 января 2020

Всегда есть метод грубой силы, просто напишите непосредственно в файл HTML.

Используйте операторы PUT для вывода sh прямого текста, и вы также можете условно указать, когда ставить определенные операторы.

Вот грубый, непроверенный пример:

data _null_;

file 'demo.html'; *name and properties of file to be created;
set source_data; *input data set;

if _n_ =1 then do; *put all beginning text before data;

put '<!doctype html>';
put '<html>';
put '<head>';
....

put ' var data = [';
end;

*******************************************************;
*create data portion;
*******************************************************;

put    '{"source": "' source_variable '",';
put    '"target": "' x_variable '",';
put    '"value": ' value_variable;
put    '}';

*only place comma between elements so last one does not need one;
if not eof then do;
    put ',';
end;

*place all lines of code after;
if eof then do;
put '];';

*rest of code;
put ' graph = {
 "nodes": [],
 "links": []
  };';

end;
run;
...