小编Rob*_*dge的帖子

如何在SAS中检测数据集中的观察数量(或者是否为空)?

我想知道是否有一种检测数据集是否为空的方法,即它没有观察结果.或者在另一种说法中,如何获得特定数据集中的观察数量.

这样我就可以编写一个If语句来设置一些条件.

谢谢.

sas

18
推荐指数
3
解决办法
5万
查看次数

返回的关系太多了

免责声明:我是neo4j的初学者.我已经完成了教程.我已经构建了我的数据,并将其加载到graphdb中,我正在尝试验证它是否正确导入.

我不确定我遇到的问题是我在导入或密码查询中所做的事情.

我正在使用此导入工具导入以下文件(以下文件已经过滤,只包含我正在调查的行):

application_id节点文件:

application_id:ID(application_id),:LABEL
2036983247,application_id
2037028183,application_id
Run Code Online (Sandbox Code Playgroud)

personal_phone节点文件:

personal_phone:ID(personal_phone),:LABEL    
5555551234,personal_phone
Run Code Online (Sandbox Code Playgroud)

关系文件:

:START_ID(personal_phone),:END_ID(application_id),:TYPE
5555551234,2036983247,APPLIED
5555551234,2037028183,APPLIED
Run Code Online (Sandbox Code Playgroud)

我的密码查询:

match p= (a {personal_phone:'5555551234'}) -->(b) return p
Run Code Online (Sandbox Code Playgroud)

在我的结果中,我看到personal_phone节点与每个application_id节点有2个"APPLIED"关系.我希望只看到一个.我哪里错了?

编辑:这就是我所看到的.中心节点是personal_phone节点.

在此输入图像描述

编辑2: 所以我发现使用dumpneo4j shell中的语句我可以获得数据库的导出.我想我会为有问题的节点运行它:

$ dump match p= (a personal_phone:'5555551234'})-->(b) return p;
Run Code Online (Sandbox Code Playgroud)

返回:

begin
create (_5:`application_id` {`application_id`:"2036983247"})
create (_410:`application_id` {`application_id`:"2037028183"})
create (_6928:`personal_phone` {`personal_phone`:"5555551234"})
create _6928-[:`APPLIED`]->_410
create _6928-[:`APPLIED`]->_5
create _6928-[:`APPLIED`]->_410
create _6928-[:`APPLIED`]->_5
;
commit
Run Code Online (Sandbox Code Playgroud)

这表明我肯定有重复的关系.关于如何解决这个问题的任何想法?

neo4j cypher

7
推荐指数
1
解决办法
188
查看次数

如何在 C# 中使用 SAS 访问 Azure blob

当我尝试使用临时共享访问签名 (SAS) 创建/访问 Azure blob 时,我收到“远程服务器返回错误:(403) 禁止”。错误。有人可以帮我确定这段代码出了什么问题吗?

    // Calling this function from Main().
    public void uploadToBlob()
    {
        string content = "Hello World - Content of the file";
        string fileName = "TestFile";
        UploadFileToAzureBlobStorage(content, fileName);
    }

    void UploadFileToAzureBlobStorage(string content, string fileName)
    {
        string storageKey = "SAS Key";
        string storageAccount = "Storage Account name";
        string containerName = "Container Name";
        string blobName = fileName;

        string method = "PUT";
        string sampleContent = content;
        int contentLength = Encoding.UTF8.GetByteCount(sampleContent);

        string requestUri = $"https://{storageAccount}.blob.core.windows.net/{containerName}/{blobName}";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); …
Run Code Online (Sandbox Code Playgroud)

rest blob azure

6
推荐指数
1
解决办法
1万
查看次数

SAS中的ODBC密码安全性

我们希望从SAS代码中的ODBC连接字符串中删除硬编码的密码,并且还希望避免任何密码出现在SAS日志文件中。

似乎有很多白皮书讨论如何解决此问题,但是我要么发现它们有问题,要么无法使其工作。

每次提示用户输入PW都不可行。同样,将密码存储在宏变量中也是可以接受的方法,只要您有一种方法可以在打开MACROGEN和SYMBOLGEN选项的情况下禁止将其打印到日志中。

尝试1-编码在此处链接至白皮书

proc pwencode in='mypassword' method=sasenc;
run;
Run Code Online (Sandbox Code Playgroud)

给出:

{sasenc}ACFD24061BF77D7D5362EE7C2D00D08B
Run Code Online (Sandbox Code Playgroud)

如果我将我的纯文本密码替换为代码中的编码值,则ODBC passthrough语句可以正常运行。

proc sql noprint;
  connect to odbc as remote (datasrc=cmg_report user=myuser password='{sasenc}68B279564BD2695538CDCDB301E8A357563480B0');
  create table sqlo as 
  select *
  from connection to remote
  (
  select top 1 * from application
  )
  ;
  disconnect from remote;
quit;
Run Code Online (Sandbox Code Playgroud)

并且日志正确掩盖了带有XXXXXXX的值。

961  proc sql noprint;
962    connect to odbc as remote (datasrc=cmg_report user=&user_cmg password=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX);
963    create table sqlo as
964    select *
965    from connection to remote
966    (
967 …
Run Code Online (Sandbox Code Playgroud)

security odbc sas password-protection

5
推荐指数
1
解决办法
8102
查看次数

使用SAS和mkdir在Windows中创建目录结构

我想在Windows中从SAS中创建目录结构。最好使用一种允许我指定UNC命名约定的方法,例如:

\\computername\downloads\x\y\z
Run Code Online (Sandbox Code Playgroud)

我在网上看到了许多使用SAS mkdir命令通过%sysexec()或命令调用SAS的示例x。mkdir命令的好处是,如果中间文件夹也不存在,它将创建任何中间文件夹。我从提示符处成功测试了以下命令,它的行为与预期的一样(引号似乎无关紧要,因为我的路径名中没有空格):

mkdir \\computername\downloads\x\y\z
mkdir d:\y
mkdir d:\y\y
mkdir "d:\z"
mkdir "d:\z\z"
mkdir \\computername\downloads\z\z\z
mkdir "\\computername\downloads\z\z\z"
Run Code Online (Sandbox Code Playgroud)

从SAS可以正常运行以下命令:

x mkdir d:\x;
x 'mkdir d:\y';
x 'mkdir "d:\z"';
x mkdir \\computername\downloads\x;
x 'mkdir \\computername\downloads\y';
Run Code Online (Sandbox Code Playgroud)

但是当从SAS运行时,这些命令不起作用,例如:

x mkdir d:\x\x;
x 'mkdir d:\y\y';
x 'mkdir "d:\z\z"';
x mkdir \\computername\downloads\x\y\z ;
x 'mkdir "\\computername\downloads\z"';

** OR **;

%sysexec mkdir "\\computername\downloads\x\y\z ";

** OR **;

filename mkdir pipe "mkdir \\computername\downloads\x\y\z";
data _null_;
  input mkdir;
  put infile;
run;
Run Code Online (Sandbox Code Playgroud)

这是行不通的。不仅如此,即使我已options …

windows-xp cmd sas mkdir

5
推荐指数
1
解决办法
2万
查看次数

快速检索SAS索引的最后一行

我有一个非常大的表,其中包含ID字段和日期时间字段.该表按ID字段排序,并在日期时间字段中按INDEXED排序.

我想快速找到最大日期时间值,但我找不到任何好的方法来做到这一点.

样本数据:

data x;
  do id=1 to 10000000;
    created_datetime = datetime() + (ranuni(1)*100000);
    output;
  end;
  format created_datetime datetime22.;
run;

proc sql noprint;
  create index created_datetime on x;
quit;
Run Code Online (Sandbox Code Playgroud)

尝试#1:PROC SQLmax()功能

出于某种原因,我认为这会立即返回结果,但我发现实际发生的事情是反直觉的(至少对我而言).使用该max()功能不使用索引 - 它不能!where子句等可以使用索引,但max()函数不能.即使您强制使用索引,它仍然会处理表中的所有行,只是按照使用索引返回它们的顺序.

option msglevel=i;
proc sql noprint;
  select max(created_datetime) from x(idxname=x);
quit;
Run Code Online (Sandbox Code Playgroud)

尝试#2:按组处理

下面使用索引轻松返回第一行:

data min; 
  set x;
  by created_datetime;
  output;
  stop;
run;
Run Code Online (Sandbox Code Playgroud)

但我不能使用descending关键字在列表中向后工作以获取最后一行:

data min; 
  set x;
  by descending created_datetime;
  output;
  stop;
run;
Run Code Online (Sandbox Code Playgroud)

SAS似乎也不支持降序索引,所以我也不能使用这种方法.

尝试#3:使用有关索引和WHERE语句的元数据

SASHELP.VINDEX希望可能最大值可能存储在我可以在where语句中使用的元数据中.那里没有运气.

编辑: …

indexing sas

5
推荐指数
1
解决办法
388
查看次数

SAS安全列名称

SAS中有一种简单的方法可以将字符串转换为可用作列名的SAS安全名称吗?

即.

Rob Penridge ---->  Rob_Penridge

$*@'Blah@*   ---->  ____Blah__
Run Code Online (Sandbox Code Playgroud)

我正在使用a proc transpose,然后想要在转置后使用重命名的列.

transpose sas

4
推荐指数
1
解决办法
1435
查看次数

通过SAS中的组处理

我有一个非常大的表,其中包含一个索引日期时间字段.我希望按月对数据集进行分组处理,只输出每个月的最后一次观察.

问题是它不包含月份字段,所以我不能使用这样的东西:

if last.month then do;
  output;
end;
Run Code Online (Sandbox Code Playgroud)

有没有办法可以实现这种行为,而无需在以前的datastep中添加月份字段?该表是50 gig压缩,所以我想避免任何不必要的步骤.

谢谢

sas

2
推荐指数
1
解决办法
317
查看次数

删除字段包含空值的行

我有以下数据集

col1 q1 q2 q3 q4 q5 
a    -  2  1  2  2
b    - -   -  -  -
b    1 2  -   -  - 
d    3 -  -  -   -
Run Code Online (Sandbox Code Playgroud)

我想在 SAS 中应用一个条件,允许我删除所有列(q1 到 q5)为空的情况。我想看看这个:

col1 q1 q2 q3 q4 q5 
a    -  2  1  2  2
b    1 2  -   -  - 
d    3 -  -  -   -
Run Code Online (Sandbox Code Playgroud)

sas

2
推荐指数
1
解决办法
530
查看次数

替换 SAS 数据集中的值

我想要一个代码来将列中的数字替换为字符。

例如:0-“否”1-“是”。

我尝试使用 if/else 但它不起作用!

Data Assign2.Grocery_coup_two;                                                                                                          
Set Assign2.Grocery_coupons;                                                                                                            
If Heath_food_Store = 0                                                                                                                 
then Health_food_Store = "No";                                                                                                          
Else Health_food_Store = "Yes";                                                                                                         
Run;    





Health_Food_Store
0
0
0
0
1
0
1
0
0
0
1
0
1
0
0
1
Run Code Online (Sandbox Code Playgroud)

sas

2
推荐指数
1
解决办法
1万
查看次数