使用JavaScript+;SAS中创建HTML输出的D33.x代码

使用JavaScript+;SAS中创建HTML输出的D33.x代码,javascript,html,d3.js,sas,jsfiddle,Javascript,Html,D3.js,Sas,Jsfiddle,我在这里执行代码时面临一个挑战:在SAS EG上。链接中的代码使用JavaScript和D33.x创建了一个Sankey图,并希望使用SAS EG为内部数据创建相同的图 我尝试使用procstream&PROC模板,但它生成了空白的HTML输出 如果你能指导我这个项目,我将不胜感激 谢谢大家! JSFIDLE的输入数据代码: var data = [{ "source": "A", "target": "X", "value": 5 }, { "s

我在这里执行代码时面临一个挑战:在SAS EG上。链接中的代码使用JavaScript和D33.x创建了一个Sankey图,并希望使用SAS EG为内部数据创建相同的图

我尝试使用procstream&PROC模板,但它生成了空白的HTML输出

如果你能指导我这个项目,我将不胜感激

谢谢大家!

JSFIDLE的输入数据代码:

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
}
];

总是有蛮力方法,只需直接写入HTML文件

使用PUT语句推送直接文本,您还可以有条件地选择何时放置某些语句

下面是一个粗略的、未经测试的示例:

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;
数据\u空\u;
文件'demo.html'*要创建的文件的名称和属性;
设置源数据*输入数据集;
如果_n_=1,则执行*将所有开始文本置于数据之前;
放‘’;
放‘’;
放‘’;
....
将'var data=[';
结束;
*******************************************************;
*创建数据部分;
*******************************************************;
放入“{”源“:“'source_variable'”;
放入“目标”:“x_变量”;
放入“值”:“值”变量;
放‘}’;
*仅在元素之间放置逗号,以便最后一个元素不需要逗号;
如果不是eof,则执行;
放",",;
结束;
*将所有代码行放在后面;
如果是eof,那么做;
把“];”;
*代码的其余部分;
put'图形={
“节点”:[],
“链接”:[]
};';
结束;
跑

你真的需要用那种难以阅读的格式吗

无论如何,通过数据步骤很容易生成

因为您没有显示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字段名匹配时。

这里不清楚您要问什么。您是否正在尝试从数据集创建上述内容?那个数据集有什么格式?您需要从JSFIDLE创建整个代码吗?SAS可以直接创建Sankey图表,也可以直接创建HTML。您可以显示您尝试过的SAS代码吗?@Richard:请在此处查看SAS代码:@Reeza:是的,我需要从JSFIDLE创建的整个代码来处理SAS。有办法吗?谢谢你,Reeza!我尝试使用你的方法,但生成的HTML文件是空的。谢谢你,Reeza!!!你的解决方案奏效了。我在超链接.js文件时遇到了问题。一旦我在.js和.css文件中添加了“https”,它就可以加载函数了!非常感谢你!谢谢,汤姆。我的问题不是关于数据集的格式,而是如何将JSFIDLE中的代码用于内部数据?如果JSFIDLE不是SAS中的数据集,您将向它传递什么数据?