Todos nós, sereLepes, já passamos ou estamos passando pelo processo inicial de aprender uma nova linguagem ou um novo programa e durante esse momento nos deparamos com alguns dilemas: faço um código rápido de fazer porém, repetitivo e de difícil manutenção ou faço um código mais robusto que me demande mais tempo porém, com uma manutenção mais fácil. Faço um código rápido e que só eu consigo entender e depois traduzo-o ou faço desde o início um código comentado e legível por terceiros mas que me demandará mais tempo.
Ainda, quem que nunca precisou consultar ou “rodar” novamente um código feito no passado por uma pessoa que não é possível mais consultá-la e ficou horas tentando decifrar este código? Ou até mesmo um código feito por você mesmo no passado?Figura 1 - Como escrever um bom código
Essas dificuldades podem ser minimizadas com a construção de um bom código e este guia foi criado com o intuito de reduzir esses problemas e padronizar os códigos do Lepes, para que os atuais e futuros sereLepes possam dar continuidade ao trabalho desenvolvido no Lepes.
Assim, este guia será dividido em três partes. A primeira definindo o que é um bom código. A segunda e a terceira são referentes a boas práticas em programação aplicadas ao software RStudio1 e Stata2.
Figura 2 - Qualidade de um código
O que é um bom código? Um bom código é aquele que gera resultados corretos e é facilmente lido, replicado e adaptado por terceiros. Ou seja, para construir um bom código é preciso aplicar técnicas simples visando a fácil compreensão e que esta revele o objetivo do código (Bjarkefur et al. 2020)(Martin 2009).
Características de um bom código: correto, fácil de ler, replicável, útil e compreensível por terceiros.
Por que devo desenvolver um bom código? Primeiro se pergunte: “alguma vez um código ruim já lhe atrasou consideravelmente?” A produtividade de um projeto de pesquisa está diretamente ligada a organização do projeto e a qualidade dos códigos utilizados neste. Por isso, desenvolver um código em que seja possível entender o que está sendo feito e o porque é fundamental. Caso contrário, informações são perdidas e erros são passados a frente e para corrigi-los você cairá na pergunta inicial “alguma vez um código ruim já lhe atrasou consideravelmente?”
Adote o pensamento que outras pessoas no futuro vão precisar do seu código e você não estará presente para ajudá-las. Então, se pergunte se o seu código é compreensível?
Sempre peça para alguém revisar o seu código: Durante a construção do seu código ou assim que terminá-lo, é de suma importância que uma outra pessoa veja o que foi feito. Primeiro pois, erros são humanos e frequentes e, também, pela garantia que o código esteja compreensível por terceiros.
Inclusive você, sereLepe, crie o costume também de revisar os códigos dos colegas. Essa é uma excelente prática para melhorar sua habilidade com a linguagem ou programa utilizado.
Um bom código perpassa por duas áreas: estilo e sintaxe. O estilo corresponde aos elementos não funcionais como, por exemplo, espaçamento, indentação e nomeação. Já a sintaxe corresponde a linguagem do seu código e como ele é legível. Essas áreas aplicadas ao RStudio são abordadas nessa sessão.
Estilo de programação é uma forma de descrever o esforço que deve ser feito para tornar seu código fácil de ler e entender. Uma boa organização do código e o uso de comentários podem ajudar o leitor a entender o que o programa faz e por quê.
O tamanho da linha não afeta o resultado do seu código mas pode torná-lo muito mais legível. Ao ler um texto, é sempre incômodo ter que ficar rolando a página de um lado para o outro. Esse sentimento é o mesmo ao ler um script. Tenha em mente que o seu script será lido em outros computadores, que possuem tamanho de tela diferentes e janelas do RStudio em tamanhos diferentes. Portanto, adote a regra de bolso de 80 caracteres (em torno) por linha.
Comentários não mudam o resultado do seu programa e eles podem tornar seu código muito mais compreensível para terceiros. Portanto, comente bastante! Porém, lembre que quanto mais simples for o seu código, menos necessidade de comentários você terá.
Tenha em mente que seu código precisa deixar claro o que você está fazendo, o porque está fazendo e com base em que está fazendo. O que você está fazendo pode ficar mais explícito com pequenos comentários sobre o que está sendo feito em cada função ou linha. Porque está fazendo e com base em que está fazendo envolve decisões tomadas ao longo do projeto que precisam ser relatadas e uma das formas de relatar essa decisão é através de comentários3. Não se acanhe em deixar bem explicado o porquê tal parte do código está sendo implementada, principalmente as partes que excluem observações e variáveis.
Assim, comece o seu programa com um comentário no início indicando o objetivo do código e o produto dele gerado (caso haja algum). Indique também a que projeto esse programa pertence, data de criação do programa, última data de modificação e qual o autor(a) ou autores(as). O modelo a ser seguido está apresentado no pedaço de script abaixo. Note que no modelo abaixo existe uma parte de “produto gerado,” este indica o que o programa está gerando. Por exemplo, um script que faz a limpeza de uma base de dados bruta está gerando uma base de dados finais, ou então um programa que faz análise descritiva de uma base de dados está gerando gráficos e tabelas referentes a análise descritiva.
#----------------------------------------------------------------------------------------------
# PROJETO: Nome do projeto
#
# OBJETIVO: Objetivo do script Lorem ipsum dolor sit amet consectetur adipiscing,
# elit semper turpis vivamus ultrices molestie volutpat, orci mauris nec pulvinar parturient.
# Quis torquent sem aptent posuere quam quisque ex tempor
#
# PRODUTO: Produto gerado pelo script
#
# AUTOR: SereLepe da Silva
#
# DATA DE CRIACAO: mm/aaaa
#
# DATA DE MODIFICACAO: mm/aaaa
#
# MODIFICACOES: falar o que foi feito na modificacao. Foi acrescentado Lorem ipsum dolor sit # # amet consectetur adipiscing. A parte tal foi modificada disso para isso.
#----------------------------------------------------------------------------------------------
Para comentar localmente o que está fazendo seja bem sucinto e utilize somente uma linha. Ainda, para justificar algum código faça-o de forma clara e sucinta, conforme o padrão abaixo.
#----Estruturando a base-----------------------------------------------------------------------
# Colocando as observacoes em caixa alta
## Colocando em caixa alta pois Lorem ipsum dolor sit amet consectetur adipiscing,
## elit semper turpis vivamus ultrices molestie volutpat (justificando)
for(coluna in 1:ncol(base_dados) ){
try( for(linha in 1:nrow(base_dados) ){
base_dados[linha,coluna] <- toupper(base_dados[linha, coluna])
}
)
}
rm(linha, coluna)
Caso queria explicar algum argumento do código (essa é uma prática excelente) faça conforme exemplificado abaixo, logo após o argumento. Além disso, tente manter esses comentários alinhados. Visualmente fica muito melhor.
# Corrigindo acentuacao e caracteres especiais
for(coluna in 1:ncol(base_dados) ){
try( for(linha in 1:nrow(base_dados) ){
#corrigindo acentos e cedilha
base_dados[linha,coluna] <- stri_trans_general(base_dados[linha,coluna], "Latin-ASCII")
#corrigindo caracteres especiais
base_dados[linha,coluna] <- gsub("-" ,"" , base_dados[linha,coluna])
base_dados[linha,coluna] <- gsub("\\." ,"" , base_dados[linha,coluna]) #\\. = . (ponto)
base_dados[linha,coluna] <- gsub("ª" ,"" , base_dados[linha,coluna])
base_dados[linha,coluna] <- gsub("º" ,"" , base_dados[linha,coluna])
}
)
}
rm(linha, coluna)
Assim sendo, comente sempre que achar necessário (COMENTE MUITO!) e nunca (NUNCA!) utilize acentos ortográficos nos comentários.
No RStudio, adicionar espaços não altera a execução do código e utilizá-los torna o seu programa muito mais legível e visualmente agradável. Note a diferença entre os códigos nos códigos abaixo, como um é visualmente mais agradável que o outro.
# BOM
# Corrigindo codigo_inep
base_dados = base_dados %>%
mutate( codigo_inep = case_when(
codigo_inep == 19522 ~ 35585497,
codigo_inep == 92873 ~ 35092873,
codigo_inep == 35052986 ~ 35051986,
codigo_inep == 35087105 ~ 35238053,
codigo_inep == 35271732 ~ 35271792,
is.na(codigo_inep) ~ 35051901,
TRUE ~ as.numeric(codigo_inep)
)
)
# RUIM
# Corrigindo codigo_inep
base_dados=base_dados%>%
mutate(codigo_inep=case_when(
codigo_inep==19522~35585497,
codigo_inep==92873~35092873,
codigo_inep==35052986~35051986,
codigo_inep==35087105~35238053,
codigo_inep==35271732~35271792,
is.na(codigo_inep)~35051901,
TRUE~as.numeric(codigo_inep)
)
)
Colocar espaçamento entre operadores4 torna o seu script muito mais legível e visualmente agradável. Observe como o exemplo ruim acima está muito mais difícil de se entender. Além de espaçamento ao redor de operadores, coloque espaços entre argumentos de uma função e entre os parênteses de uma função.
A sintaxe de um código está associada à linguagem do programa utilizado e suas características. Em relação ao RStudio, aqui são abordados os seguintes assuntos sobre sintaxe com o objetivo de tornar seu código legível: carregamento de pacotes, nomeação de objetos e funçoes, loop e organização do script.
Programar em R em geral requer uso de funções pertencentes a pacotes específicos e muitas vezes utilizamos mais de um pacote em um script. Assim, a melhor forma de chamar esses pacotes é no início do script.
Ainda, como um script pode ser “rodado” no futuro e por outras pessoas, é importante guardar a informação da versão do pacote utilizado, para que resultados possam ser reproduzidos por todos e a qualquer momento. Para fazer isso você precisará rodar o seu script em alguns passos:
Rodando um comando que veja a versão dos pacotes utilizados;
Preenchendo essa informação em comentários ao lado de cada pacote conforme sua respectiva versão;
Excluindo esse comando/linha ou deixando ela comentada;
Chamando o pacote e seguindo com o script.
A versão final do seu script deve ficar conforme está no chunk abaixo.
#----Pacotes utilizados-------------------------------------------------------------------------
pacotes <- c( "readxl" , # Versao 1.3.1
"dplyr" , # Versao 1.0.1
"stringi" , # Versao 1.4.6
"tidyr" , # Versao 1.1.0
"stringr" ) # Versao 1.4.0
# lapply(pacotes, packageVersion)
lapply(pacotes, library, character.only = T)
rm(pacotes)
O RStudio permite que dentro do seu código seja possível organizá-lo em seções através de dois tipos de comentários específicos e, ainda, é possível acessar a seção de forma rápida (sem ser pelo rolamento do script).
Para criar uma seção no script basta fazer um comentário do tipo #- (pelo menos um - depois de #) ou, então, do tipo # (pelo menos um #). Porém, para a prática da divisão do script em seções ser instrutiva é preciso nomear essas seções de acordo com o que será feito nela, vide o exemplo e imagem abaixos. Após o texto no comentário é preciso preenchê-lo com, pelo menos, quatro hífens (-) ou hashtags (#).
Ainda, note que no exemplo apresentado abaixo o tipo de comentário foi #- - - - e não foi em vão. Esse tipo de comentário torna o seu programa visualmente mais limpo5.
#----------------------------------------------------------------------------------------------
# PROJETO: MELQO PRE ESCOLA - SAO PAULO
#
# OBJETIVO: Prepara a base de dados, processo de estruturacao de variaveis e
# limpeza de dados da entrevista com o diretor (pre-escola)
#
# PRODUTO: Base de dados final
#
# AUTOR: SereLepe da Silva
#
# DATA DE CRIACAO: 02/2020
#
# DATA DE MODIFICACAO: 03/2020
#----------------------------------------------------------------------------------------------
#----Pacotes utilizados------------------------------------------------------------------------
pacotes <- c( "readxl" , # Versao 1.3.1
"dplyr" , # Versao 1.0.1
"stringi" , # Versao 1.4.6
"tidyr" , # Versao 1.1.0
"stringr" ) # Versao 1.4.0
# lapply(pacotes, packageVersion)
lapply(pacotes, library, character.only = T)
rm(pacotes)
#----Caminhos----------------------------------------------------------------------------------
caminho_base_dados <- "C:/Laboratório/Dados/MELQO/MELQO SAO PAULO/ORIGINAIS/CAMPO"
caminho_programas <- "C:/Laboratório/daniel/melqo/melqo sao paulo/programas/do/campo"
Vale ressaltar, por fim, uma prática que permite que seu código fique mais organizado é criar e fazer de uma seção para caminhos (paths) de onde e para onde os arquivos serão importados e exportados. Note que no chunk acima existe esta seção.
Como tudo que existe no R é um objeto, é de suma importância aprender a nomeá-los. Dessa forma, é importante que o nome do objeto seja capaz de exprimir o que ele é porém sem ser redundante ou com uso excessivo de caracteres. Note como nos exemplos abaixo o uso excessivo de caracteres não ajudou na compreensão do objeto e que bastou algumas palavras que para compreendê-lo. O uso escasso de variáveis também não é recomendado, assim como o uso de caracteres em caixa alta.
Para separar palavras no nome do objeto é possível utilizar um ponto . ou underline _ . Porém é preferível o uso de underline.
#BOM
#pegando o numero da coluna respectivo a variavel
numero_coluna_variavel <- which( colnames(base_dados) == variavel )
#RUIM
#pegando o numero da coluna respectivo a variavel
numero_da_coluna_desta_variavel <- which( colnames(base_dados) == variavel )
numerocolunavariavel <- which( colnames(base_dados) == variavel )
NumeroColunaVariavel <- which( colnames(base_dados) == variavel )
numero <- which( colnames(base_dados) == variavel )
coluna <- which( colnames(base_dados) == variavel )
Para nomear funções criadas no seu script o raciocínio é o mesmo para a nomeação de objetos: seja sucinto, claro mas sem uso excessivo ou escasso de caracteres e também não faça uso de caracteres em caixa alta. Assim como para objetos, para separar palavras no nome de uma função é possível utilizar um ponto . ou underline _ .
Porém, não utilize o mesmo padrão optado para nomear objetos, ou seja, se você optar pelo underline para nomear seu objeto, utilize o ponto para nomear sua função. Inclusive, esse é o padrão recomendado: underline para nomear objetos, utilize o ponto para nomear funções.
Ainda sobre funções, ao criar uma função é preciso que esta tenha um único objetivo e não vários. Funções longas que fazem mais de uma coisa aumentam as chances de conterem erros. Elas também tornam a leitura e a reutilização dessa função mais difícil. Então, ao criar uma função tenha em mente que ela tem que fazer uma coisa só. Caso a sua função faça várias coisas, divida-a em várias funções.
É comum a diversas linguagens de programação escrever um loop utilizando somente a letra “i” ou “x” para o índice ou elemento, no entanto, essa forma não deixa claro o que está sendo percorrido. No passado esse tipo de prática era utilizado por conta do alto consumo de memória que o uso de caracteres tinha porém, atualmente isso não é mais um problema. Escrever o nome do que está sendo percorrido torna o seu código muito mais compreensível. Note a diferença abaixo.
#BOM
# Colocando as observacoes em caixa alta
for(coluna in 1:ncol(base_dados) ){
try( for(linha in 1:nrow(base_dados) ){
base_dados[linha,coluna] <- toupper(base_dados[linha, coluna])
}
)
}
rm(linha, coluna)
#RUIM
# Colocando as observacoes em caixa alta
for(i in 1:ncol(base_dados) ){
try( for(j in 1:nrow(base_dados) ){
base_dados[j,i] <- toupper(base_dados[j,i])
})
}
rm(j, i)
Sempre prefira usar os condicionais if-else ao invés de usar dois condicionais if, conforme abaixo. Note que ao usar if-else você explicita que os dois casos são mutuamente exclusivos, além de deixar seu código mais legível.
#BOM
if( score > 15 ){
#faz algo
} else{
#faz outra coisa
}
#RUIM
if( score > 15 ){
#faz algo
}
if( socre <= 15 ){
#faz outra coisa
}
O conteúdo desenvolvido nessa seção foi baseado em Bjarkefur et al. (2020).
Um bom código perpassa por duas áreas: estilo e sintaxe. O estilo corresponde a elementos não funcionais como, por exemplo, espaçamento, indentação e nomeação. Já a sintaxe corresponde a linguagem do seu código e como ele é legível. Essas áreas aplicadas ao Stata serão abordadas nessa sessão.
Estilo de programação é uma forma de descrever o esforço que deve ser feito para tornar seu código fácil de ler e entender. Uma boa organização do código e o uso de comentários podem ajudar o leitor a entender o que o programa faz e por quê.
Comentários não mudam o resultado do seu programa mas eles podem tornar seu código muito mais compreensível para terceiros. Portanto, comente bastante! Porém, lembre que quanto mais simples for o seu código, menos necessidade de comentários você terá.
Tenha em mente que seu código precisa deixar claro o que você está fazendo, o porque está fazendo e com base em que está fazendo. O que você está fazendo pode ficar mais explícito com pequenos comentários sobre o que está sendo feito em cada comando. Porque está fazendo e com base em que está fazendo envolve decisões tomadas ao longo do projeto que precisam ser relatadas e uma das formas de relatar essa decisão é através de comentários6. Não se acanhe em deixar bem explicado porque tal parte do código está sendo implementada, principalmente as partes que excluem observações e variáveis.
Assim, comece o seu programa com um comentário no início indicando o objetivo do código e o produto dele gerado (caso haja algum). Indique também a que projeto esse programa pertence, data de criação do programa, última data de modificação e qual o autor(a) ou autores(as). O modelo a ser seguido está apresentado abaixo. Note que no modelo abaixo existe uma parte de “produto gerado,” este indica o que o programa está gerando. Por exemplo, um do-file que faz a limpeza de uma base de dados bruta está gerando uma base de dados finais, ou então um programa que faz análise descritiva de uma base de dados está gerando gráficos e tabelas referentes a análise descritiva.
/**********************************************************************************************
PROJETO: Nome do projeto
OBJETIVO: Objetivo do programa (do-file) Lorem ipsum dolor sit amet consectetur adipiscing, ///
elit semper turpis vivamus ultrices molestie volutpat, orci mauris nec pulvinar parturient. ///
Quis torquent sem aptent posuere quam quisque ex tempor
PRODUTO: Produto gerado pelo programa (do-file)
AUTOR: SereLepe da Silva
DATA DE CRIACAO: mm/aaaa
ULTIMA MODIFICACAO: mm/aaaa
*********************************************************************************************/
Para comentar um bloco de código fechado faça-o conforme o exemplo abaixo, em caixa alta. Note que ela pode se referir a um conjunto específico de comandos utilizados, como definição de labels ou pode também se referir a uma fase do programa, como correções pontuais da base de dados.
Já para comentar localmente o que está fazendo seja bem sucinto e utilize somente uma linha. E, por fim, para justificar algum comando faça-o de forma clara e sucinta, conforme o padrão abaixo.
/***********************************************************************************************
MACROS-CAMINHOS*/
{
local basedados "C:\Laboratório\..."
local programas "C:\Laboratório\...\programas"
local logs "C:\Laboratório\...logs"
local workstata "C:\Work Stata"
local tabelas "C:\Laboratório\...\tabelas"
}
/*********************************************************************************************/
/***********************************************************************************************
IMPORTANDO BASE*/
{
import excel "$base_dados\base_de_dados.xlsx" , sheet("Página1") firstrow clear
*Renomeando as variaveis conforme o dicionario
ren nomeentrevistador nome_entrevistador
ren codentrevistador cod_entrevistador
*Renomeando as variaveis conforme o dicionario
/* Renomeando as variaveis conforme o dicionario pois Lorem ipsum dolor sit amet ///
consectetur adipiscing, elit semper turpis vivamus ultrices molestie volutpat
*/
ren nomeentrevistador nome_entrevistador
ren codentrevistador cod_entrevistador
}
/*********************************************************************************************/
Assim sendo, comente sempre que achar necessário (COMENTE MUITO!) e nunca (NUNCA!) utilize acentos ortográficos nos comentários.
No Stata, adicionar espaços não altera a execução do código e utilizá-los torna o seu programa muito mais legível e visualmente agradável. Note a diferença entre os códigos abaixo, como um é visualmente mais agradável que o outro.
*BOM
/***********************************************************************************************
MACROS-CAMINHOS*/
{
local basedados "C:\Laboratório\..."
local programas "C:\Laboratório\...\programas"
local logs "C:\Laboratório\...logs"
local workstata "C:\Work Stata"
local tabelas "C:\Laboratório\...\tabelas"
}
/*********************************************************************************************/
*RUIM
/***********************************************************************************************
MACROS-CAMINHOS*/
{
local basedados "C:\Laboratório\..."
local programas "C:\Laboratório\...\programas"
local logs "C:\Laboratório\...logs"
local workstata "C:\Work Stata"
local tabelas "C:\Laboratório\...\tabelas"
}
/*********************************************************************************************/
Ao ler um código, não é prático ficar rolando a tela para direita e para esquerda constantemente, por isso, evite linhas de código longas. Tome como regra de bolso que uma linha deve ter em torno de 80 caracteres. Assim, para organizar melhor o seu código quebre a sua linha de código usando ///7. Nas versões mais recentes do Stata a quebra de linha acontece automaticamente. Porém, para fins de padronização dos códigos e como não há uniformidade entre as versões utilizadas por todos os sereLepes, construa o seu código utilizando /// conforme o exemplo abaixo.
replace modalidade = 2 if nomesc == 1 | nomesc == 6 | nomesc == 7 | ///
nomesc == 8 | nomesc == 9 | nomesc == 10 | nomesc == 11 | nomesc == 12 | ///
nomesc == 13 | nomesc == 14 | nomesc == 15 | nomesc == 16 | nomesc == 17 | ///
nomesc == 18 | nomesc == 19 | nomesc == 20 | nomesc == 21 | nomesc == 22 | ///
nomesc == 23 | nomesc == 24 | nomesc == 25 | nomesc == 27 | nomesc == 28 |
A sintaxe de um código está associada à linguagem do programa utilizado e suas características. Em relação ao Stata, aqui são abordados os seguintes assuntos sobre sintaxe com o objetivo de tornar seu código legível: macro, abreviação de comando, loop, condicionais e salvar a base.
O que é uma macro? Em poucas palavras, macro é uma forma de guardar várias palavras em uma só, por exemplo guardar um caminho (path file) do computador em apenas uma palavra. A macro possui dois comandos mais comuns local e global que correspondem a quanto tempo a macro ficará na memória. Para o comando local a macro criada ficará na memória até o do-file terminar. Já para o comando global, a macro criada ficará na memória até você sair do Stata.
Note que o uso de global permite que você crie uma macro em um projeto e ao mudar de projeto você continua com ela salva na memória. Assim, para maior segurança crie local macros.
Sempre (SEMPRE!) ao criar um do-file para o seu projeto crie primeiro as macros com os caminhos que serão utilizados no programa, conforme abaixo.
/***********************************************************************************************
MACROS-CAMINHOS*/
{
local basedados "C:\Laboratório\..."
local programas "C:\Laboratório\...\programas"
local logs "C:\Laboratório\...logs"
local workstata "C:\Work Stata"
local tabelas "C:\Laboratório\...\tabelas"
}
/*********************************************************************************************/
Os comandos do Stata geralmente podem ser abreviados, porém essa abreviação torna a leitura do seu código menos intuitiva, principalmente para novos programadores ou novos usuários do Stata.
Assim, evite abreviar os comandos, principalmente aqueles que se resumem a dois caracteres e que não indiquem claramente qual a palavra do comando.
Exemplos de abreviação compreensível:
Exemplos de abreviação não compreensível:
Na dúvida, sempre escolha não abreviar.
É comum a diversas linguagens de programação escrever um loop utilizando somente a letra “i” ou “x” para o índice ou elemento, no entanto, essa forma não deixa claro o que está sendo percorrido. No passado esse tipo de prática era utilizado por conta do alto consumo de memória que o uso caracteres tinha porém, atualmente isso não é mais um problema. Escrever o nome do que está sendo percorrido torna o seu código muito mais compreensível. Note a diferença nos exemplos a seguir.
*BOM
foreach nome in nome_alunos{
* faz algo com nome
}
*Questao 11
foreach item of numlist 1/5{
gen ed_q11_d`item' = 0
replace ed_q11_d`item' = 1 if ed_q111 == `item' | ed_q112 == `item' | ///
ed_q113 == `item' | ed_q114 == `item'
}
*RUIM
foreach i in nome_alunos{
* faz algo com i
}
*Questao 11
foreach z of numlist 1/5{
gen ed_q11_d`z'=0
replace ed_q11_d`z' = 1 if ed_q111 == `z' | ed_q112 == `z' | ed_q113 == `z' | ed_q114 == `z'
}
Em sentenças lógicas no Stata, opte sempre por usar “!” para negativas ao invés de “~.” Essa notação (“!”) é a mesma utilizada na linguagem de R (e Python também), o que é uma grande vantagem para compreensão do seu código por terceiros, já que muitos sereLepes dominam ou o Stata ou o R.
Para checar missings utilize a função missing(‘var’) ao invés de construir um if(‘var’ \(>=\) .), conforme demonstrado abaixo.
*BOM
replace gen genero_mulher = "Feminino" if (genero == 1)
replace gen genero_homem = "Masculino" if ((genero != 1) & !missing(genero))
*RUIM
replace gen genero_mulher = "Feminino" if genero == 1
replace gen genero_homem = "Masculino" if genero ~= 1
Sempre prefira usar os condicionais if-else ao invés de usar dois condicionais if, conforme os exemplos. Note que ao usar if-else você explicita que os dois casos são mutuamente exclusivos, além de deixar seu código mais legível.
*BOM
if ( score > 15 ){
*faz alguma coisa
}
else{
*faz outra coisa
}
*RUIM
if ( score > 15 ){
*faz alguma coisa
}
if ( score =< 15 ){
*faz outra coisa
}
Boas práticas ao salvar uma base de dados são verificar se existem variáveis que podem ser excluídas, em geral variáveis intermediárias de verificação. Também é uma boa prática verificar se tem linhas duplicadas e se há identificadores duplicados, já que os identificadores costumam representar apenas um indivíduo.
Ainda, antes de salvar, utilize o comando compress para diminuir o tamanho do arquivo sem perder informação, seguindo o exemplo abaixo.
O que o compress faz? O comando compress examinará os dados na memória, determinará se alguma variável pode ser armazenada em um tipo de dados menor sem perder nenhuma precisão e converterá aquelas que podem ser. Ou seja, esse comando otimiza o armazenamento.
/***********************************************************************************************
SALVANDO BASE*/
{
*Checado duplicacoes na variavel de identificacao/identificador
isid id
*Drop (dropar) variaveis que podem ser excluidas (se for o caso!)
*Otimizando armazenamento
compress
*Salvando a base
save "$base_dados_finais\base_de_dados_final.dta", replace
}
/**********************************************************************************************/
Dúvidas a respeito de um comando ou função faz parte do uso de um programa e por mais que alguém domine muito uma linguagem, é impossível saber todas as funções ou comandos e saber todos os argumentos das funções. Portanto, use (e abuse) do Help do seu programa. No RStudio, basta colocar a interrogação antes do nome da função para destacar a janela do Help com o documento que explica tal função. No Stata, basta digitar help antes do comando que ira abrir uma janela com as informações a respeito do comando.
Caso não tenha esclarecido sua dúvida, google-it! Ao pesquisar no Google8 a sua dúvida ou a respeito de uma função ou comando, você se torna oficialmente um programador! Nunca se esqueça que alguém há uns dez anos passou pela mesma dúvida que você e ela está no Stackoverflow9 ou no Statalist10. Então aproveite, pois você, sereLepe, está em ombros de gigantes!
Laboratório de Estudos e Pesquisas em Economia Social (LEPES).
Rua das Paineiras, casa 11. Campus da USP-RP
Outra forma de relatar decisões são documentos separados do código que contém todas essas informações aqui relatadas. Esse documento será no formato de um Leia-me↩︎
Estes operadores são os operadores lógicos, aritméticos, relacionais e atribuitivos. Para exemplos veja https://www.datamentor.io/r-programming/operator/ .↩︎
Lembrando que isso é apenas uma sugestão, porém o uso de seções é essencial para o seu código ser um bom código.↩︎
Outra forma de relatar decisões são documentos separados do do-file que contém todas essas informações aqui relatadas. Esse documento pode ser no formato de um Leia-me.↩︎
O Stata compreende que o código segue na linha debaixo.↩︎