以下是从exisitng数据集创建数据集的代码,其中 // App installed
let permissions = [LISDK_BASIC_PROFILE_PERMISSION,LISDK_EMAILADDRESS_PERMISSION]
LISDKSessionManager.createSession(withAuth: permissions, state: nil, showGoToAppStoreDialog: true, successBlock: { (returnState) -> Void in
LISDKAPIHelper.sharedInstance().getRequest("https://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address,picture-url,public-profile-url,industry,positions,location)?format=json", success: { (response) -> Void in
if let data = response?.data.data(using: String.Encoding.utf8) {
if let dictResponse = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers){
let token = LISDKSessionManager.sharedInstance().session.accessToken.accessTokenValue
Auth.auth().signIn(withCustomToken: token! ) { (user, error) in
print(user!)
print(error!)
}
}
}
}, error: { (error) -> Void in
print("LINKEDIN error\(String(describing: error))")
})
}) { (error) -> Void in
print("error login linkedin")
}
和end
,end8
是宏变量,只是想知道为什么在结尾处添加end7
宏变量?
.
答案 0 :(得分:3)
点标记宏变量的结尾。当宏文本与静态文本组合时经常使用它,例如,在文件名中,以便SAS知道宏变量的结束位置。 E.g:
%let year=2017;
%let filename = &year._accounts.xlsx;
%put &filename;
制作2017_accounts.xlsx
如果没有第一个点,SAS将生成警告消息,因为它将查找名为year_accounts
的宏变量。 (它无法分辨宏结束的位置和文本的开始。)
如果宏变量后面有空格或结尾语句,则可以省略点。包括点在这种情况下没有效果。有些人认为总是包含点是好的。
答案 1 :(得分:2)
它曾用于表示宏变量的结束。当您混合宏变量和文本时,这很重要。
例如:
%let my_var = TEST;
%let my_var_new = WRONG;
%put &my_var._new;
%put &my_var_new.;
输出:
58 %let my_var = TEST;
59 %let my_var_new = WRONG;
60 %put &my_var._new;
TEST_new
61 %put &my_var_new.;
WRONG
宏处理器如何知道宏变量是my_var还是my_var_new?期间告诉SAS宏变量的结束位置。
包含点也会在编辑器中将宏变量变为绿色,这有助于读取和调试代码。